분류 전체보기122 [백준 Java] 4195번: 친구 네트워크, union-find 🔗 문제링크 🔗 4195번: 친구 네트워크 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스의 첫째 줄에는 친구 관계의 수 F가 주어지며, 이 값은 100,000을 넘지 않는다. 다음 F개의 줄에는 친구 관계가 생긴 순서대로 주어진 www.acmicpc.net 🌟 생각 흐름 🌟 두 친구에 대한 이름에 대한 저장이 필요해서 HashMap을 이용해서 이름과 배열에 할당할 index를 저장했다. 배열의 사이즈는 n개의 라인에 모두 서로 다른 친구가 나올 수 있을 것 같아 2*n으로 할당했다. 이후에는 친구의 이름이 해시에 없다면 저장하고 있다면 찾아온다.(만약 그냥 저장하면 index번호가 꼬이므로 저장하지 않는다) 두 친구가 이미 친구 관계인 경우에는 친구의 개수를 리턴하고 친구가 아닌 경우에만.. 알고리즘 2023. 3. 1. Enum 클래스 열거형 : 서로 관련된 상수를 편리하게 선언하기 위한 것으로 여러 상수를 정의할 때 사용하면 유리하다. 1️⃣ 특징 열거형의 상수간의 비교에는 "=="이 사용가능하다 (빠른 성능을 제공한다) 와 같은 비교연산자는 사용이 불가능 하지만 compareTo()는 이용이 가능하다 열거형 상수 하나하나각 각 클래스의 객체이다 2️⃣ 사용법 정의 : enum 열거체이름 { 상수이름, 상수이름,... } 사용법 : 열거체 이름. 상수이름 3️⃣ enum 메서드 ordinal() : 열거체에서 정의된 순서를 반환한다.(0부터 시작한다) valuOf(상수) : 상수 반환 values() : 열거체의 모든 상수를 저장한 배열을 반환 import java.util.Arrays; public enum Prize { first.. JAVA 2023. 2. 28. 엔터티 설계 주의사항 엔터티에는 가급적 Setter를 사용하지 말자 모든 연관관계는 지연로딩으로 설정하자(실무에서 모든 연관관계는 지연로딩(lazy)해줘야 한다.) @ManyToOne, @OneToMany (@ManyToOne-> eager이 default, one to many -> lazy default 이기 때문에 주의) X to Many는 lazy 가 기본이어서 그냥 두면 되지만, 그 경우가 아니면 (EX. @Many to One) lazy로 변경해야 함 //fetch = FetchType.LAZY @OneToOne(fetch = LAZY) @ManyToOne(fetch = LAZY) 컬렉션은 필드에서 초기화한다. 테이블 이름 생성 전략 카멜 케이스 ➡️ 언더스코어(memberPoint ➡️ member_point) .. JPA 2023. 2. 27. [백준 Java]15711_환상의 짝궁_수학, 소수 🔗 문제링크 🔗 15711번: 환상의 짝꿍 환상의 나라 디디랜드에서는 인연의 증표로 끈을 하나씩 가지고 있다. 그들은 지극히 평범한 방법으로 이 끈을 이용하여 어떤 두 사람이 환상의 짝꿍인지 판단하는데, 두 사람의 끈을 서로 이 www.acmicpc.net 🌟 생각 흐름 🌟 처음 문제를 보고 짝수와 홀수를 나눠서 생각했다. 1. 홀수의 경우 소수이기 위해서는 한 수가 무조건 2이고 다른 수고 sum-2 이어야 한다. 홀수가 되기 위해서는 짝수 + 홀수 이기 때문에 유일한 짝수이자 소수인 2를 무조건 포함해야 한다고 생각했고 나머지만 소수 판별하면 되겠네라고 생가하고 넘어갔다. 2. 짝수인 경우에는? 여기서 한번 고민을 했다 이걸 다 확인할 수는 없을 거 같은데.. 그래서 구글에 "소수의 합"을 검색하니 .. 알고리즘 2023. 2. 25. ArrayList와 LinkedList List 인터페이스 : 순서가 있는 집합, 데이터의 중복을 허용하는 컬렉션을 구현하는 데 사용된다. List인터페이스를 구현한 클래스 중에 가장 많이 사용되는 클래스는 ArrayList와 LinkedList가 있다. 1️⃣ ArrayList Vector와 구현원리나 기능적인 측면에서 동일하다.(Vector클래스는 소스와의 호환성을 위해서 남겨둔 것이므로 사용하지 말자) List인터페이스를 구현한다 ArrayList는 말 그대로 배열의 원리를 이용한 컬렉션 클래스다.(배열의 사이즈는 ArrayList에서 알아서 조절한다) ArrayList가 허용하는 범위(capacity)를 넘어가는 경우 경우 기존배열의 사이즈에 *2 사이즈의 배열을 만들고 거기에 요소를 복사하여 배열을 만들어 사용한다. 배열에 요소를 삭.. JAVA 2023. 2. 24. 운영체제, 프로세스와 스레드, 멀티 프로세스와 멀티 스레드 ✨ 운영체제 운영체제란 (Operating System) 사용자의 하드웨어, 시스템 리소스를 제어하고 프로그램에 대한 일반적인 서비스를 지원하는 시스템 소프트 웨어이다. 운영체제의주된 목적은 컴퓨터에 존재하는 메모리, 키보드 등의 인터페이스, cpu, 네트워크 등을 잘 관리해 줘야 컴퓨터를 효율적으로 사용할 수 있게 하는 것이다. 부가적으로 사용자에게 편의를 제공하는 기능을 제공한다. 즉, 운영체제는 컴퓨터의 성능을 높이고 사용자에게 편의성을 제공하는 하드웨어 관리 프로그램이다. 운영체제 구성 커널 운영체제의 중요 요소로 일반인이 일반적으로 보지 못하는 낮은 수준의 프로세스를 제어한다. 얼마만큼의 메모리를 읽고 쓸 것인지, 어느 프로세스를 실행할 것인지, 모니터, 키보드, 마우스와 같은 장치를 통해 어떠.. CS 2023. 2. 23. [백준 Java]1459_걷기_그리디 🔗 문제링크 🔗 1459번: 걷기 세준이는 학교에서 집으로 가려고 한다. 도시의 크기는 무한대이고, 도시의 세로 도로는 모든 정수 x좌표마다 있고, 가로 도로는 모든 정수 y좌표마다 있다. 세준이는 현재 (0, 0)에 있다. 그리고 ( www.acmicpc.net 🌟 생각 흐름 🌟 완탐으로 한다면 x, y의 범위로 인해서 시간 초과가 날 것 같아 그리디로 풀었다 길을 걷는 경우는 3가지로 나눌 수 있다. 모든 블록을 하나씩 다 걸어가는 방법 대각선으로 (n, n)까지 가서 (n, m)이나 (m, n)으로 가는 방법 (n이 더 작다고 가정) 모든 블록을 지그재그로 가는 방법(합이 짝수인 경우에는 모든 경로를 지그재그로 갈 수 있지만 홀수인 경우에는 한 번은 그냥 블록을 걸어가야 한다) 위의 3가지를 계산해.. 알고리즘 2023. 2. 23. [백준]1953_팀배분_DFS(BFS도 가능) 🔗 문제링크 🔗 1953번: 팀배분 첫줄에는 청팀의 사람의 수를 출력하고, 그리고 둘째 줄에는 청팀에 속한 사람들을 오름차순으로 나열한다. 그리고 셋째 줄과 넷째 줄은 위와 같은 방법으로 백팀에 속한 인원의 수, 백팀에 속 www.acmicpc.net 🌟 생각 흐름 🌟 우선 문제를 풀기 위해서 싫어하는 사람들과의 표기를 그래프를 통해서 진행했다 그래프를 그린 후 한 노드에서 시작한 경우 현재 노드와 다음노드만 다른 팀이면 가능하다고 생각했다 그리고 그 다음노드에서의 다음노드가 서로 다른 팀이면 가능하다는 식으로 dfs로 구현하였다 그래서 한 노드에서 시작한후 현재 깊이가 짝수이면 청팀, 홀수 이면 백팀에 넣도록 코드를 구현하였다 예를 들어 1,2가 서로를 싫어하고 2,3이 서로를 싫어하는 경우 ↔️ : .. 알고리즘 2023. 2. 22. 오버로딩과 오버라이딩 오버로딩(OverLoading) 같은 이름의 함수(메서드)를 여러 개 생성하는 것이다 기존에 없는 새로운 메서드를 정의하는 것이다 리턴(반환) 타입이 달라도 상관이 없다 메서드의 이름이 같을 때 메서드의 파라미터의 개수나 타입이 달라야 한다 하단 코드를 실행하면 오른쪽과 같은 결과가 나옴을 확인할 수 있다. l은 long형의 리터럴 표기를 위해서 사용했다. import java.io.IOException; import java.util.List; public class Main { public static void main(String[] args) throws IOException { System.out.println(sum(List.of(1,2))); System.out.println(sum(1, 2.. JAVA 2023. 2. 22. 위상정렬 Topology Sort, 백준 1766 문제집(Java) 위상 정렬(Topology Sort) 정렬 알고리즘의 일종으로, 순서가 있는 작업을 차례대로 수행해야 하는 경우 사용할 수 있는 알고리즘이다. 방향 그래프로의 모든 그래프를 방향을 거스르지 않도록 순서대로 나열하는 것이다. 2번을 풀기 전에 1번 3번을 풀기 전에 2번 ,4번 4번을 풀기전에 5번을 푸는 것이 좋다고 하는 상황이 있다면 우리는 다음과 같은 방법들로 문제를 푸는 것이 좋다면 1->2->5->4->3 1->5->2->4->3 과 같이 다양한 경우가 만들어 질수 있다(이 외에도 가능하다) 이렇게 정렬하는것이 위상정렬이다. 추가로 위에 상황에서 쉬운 문제를 먼저 푸는 것을 우선으로 한다고 하면 1->2->5->4->3 같은 순서로 답을 낼 수 있을것이다. [(숫자: 난이도, 1번이 제일 쉬운문제.. 알고리즘 2023. 2. 22. [백준 Java] 1238 파티 (다익스트라, 데이크스트라) [문제 링크] boj 1238 자바 dijkstra graph https://www.acmicpc.net/problem/1238 1238번: 파티 첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 10,000), X가 공백으로 구분되어 입력된다. 두 번째 줄부터 M+1번째 줄까지 i번째 도로의 시작점, 끝점, 그리고 이 도로를 지나는데 필요한 소요시간 Ti가 들어 www.acmicpc.net [생각 흐름] 처음에는 다익스트라 방법으로 문제를 해결하였다. n-1번 다익스트라를 동작시키고, 파티 위치부터 돌아오는 것을 더해 가장 큰 것을 구하는 방법으로 계산하면 된다. 문제에서는 시간상으로 통과하지만 더 좋은 풀이가 있을것 같아 다른 풀이도 확인해본 결과 A -> B로 가는 걸로 돌아가는 걸 계산.. 알고리즘 2023. 2. 21. [백준 Java] 11054 가장 긴 바이토닉 부분수열 [문제 링크] boj 11054 가장 긴 바이 토닉 부분 수열 자바 풀이 https://www.acmicpc.net/problem/11054 11054번: 가장 긴 바이토닉 부분 수열 첫째 줄에 수열 A의 크기 N이 주어지고, 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ N ≤ 1,000, 1 ≤ Ai ≤ 1,000) www.acmicpc.net [생각 흐름] 전에 풀었던 11053 https://www.acmicpc.net/problem/11053 (가장 긴 증가하는 부분 수열) 문제와 유사한 풀이 방법으로 해결했다. 앞에서부터 arr [i]를 포함한다는 전제로 arr [i]보다 작고 arr [j]까지의 최대 증가 부분 수열(sum [j])가 sum [i] 보다 크다면 sum[i] =.. 알고리즘 2023. 2. 21. 이전 1 ··· 4 5 6 7 8 9 10 11 다음