본문 바로가기

Coding Test

(134)
[Java] 30번 [13116번] https://www.acmicpc.net/problem/13116예제 입력1333 799 151022 1023예제 출력140105110문제 접근해당 문제는 완전 이진 트리이기 때문에 배열 없이 계산 가능1부터 순차적으로 증가하기 때문에 정점의 숫자에 따라 깊이를 찾을 수 있음두 개의 정점의 깊이를 맞춘 뒤 동일한 부모 노드가 나타날 때까지 반복출력 ⇒ 같은 부모 노드 * 10문제 해결두 정수 A와 B의 깊이를 각각 구함깊이가 다를 경우 더 큰 값을 작은 값에 맞췄을 때의 정점을 구함두 정점이 같지 않을 경우 1단계 위의 부모 정점 탐색(나누기 2)두 정점이 같아졌을 때 공통 조상 발견기존 풀이 [메모리 : KB / 시간 : ms]public static void main(String[] args) th..
[Java] 신입 사원 [1946번] https://www.acmicpc.net/problem/1946예제 입력1253 21 44 12 35 573 67 34 21 45 72 56 1예제 출력143문제 접근첫 째줄에 테스트 케이스의 개수가 주어짐테스트 케이스의 첫째 줄에는 지원자 수가 주어지고, 이후 지원자 수만큼 [서류 성적, 면접 성적] 두 개가 공백으로 주어짐현재의 지원자가 다른 지원자 단 한명이라도, 서류 성적 또는 면접 성적이 떨어질 경우 선발되지 않음출력 ⇒ 테스트 케이스마다 선발할 수 있는 신입 사원의 수문제 해결[서류 성적, 면접 성적]을 멤버 변수로 갖는 클래스를 선언지원자 수 만큼 클래스의 배열을 생성클래스 배열을 서류 성적 순으로 정렬 최소 면접 점수를 저장하는 변수를 선언하여, 현재 지원자의 면접 점수가 더 낮다면 최소..
[Java] 보물 [1026번] https://www.acmicpc.net/problem/1026예제 입력151 1 1 6 02 7 8 3 1예제 출력118예제 입력231 1 310 30 20예제 출력280예제 입력395 15 100 31 39 0 0 3 2611 12 13 2 3 4 5 9 1예제 출력3528문제 접근A의 배열을 재배치하여 같은 인덱스끼리 곱한 값의 최소값을 구해야 함A 배열만 재배치가 가능하고, B 배열은 재배치를 하지 말라는 말에 현혹되면 안 됨서로의 인덱스를 곱했을 때 최소값이 나오려면 다음과 같음A배열에서 제일 큰 값 * B배열에서 제일 작은 값A배열에서 제일 작은 값 * B배열에서 제일 큰 값즉, 서로가 반대로 정렬이 될 경우 S의 최솟값을 구할 수 있음문제 해결A배열은 오름차순으로 Selection Sort..
[Java] 패션왕 [9375번] https://www.acmicpc.net/problem/9375예제 입력123hat headgearsunglasses eyewearturban headgear3mask facesunglasses facemakeup face예제 출력153문제 접근중복되지 않는 경우의 수를 구해야하기 때문에 조합으로 접근 필요첫 번째 테스트 케이스는 다음과 같은 경우의 수를 가짐 → hat, sunglasses, turban, (hat, sunglasses), (turban, sunglasses)headgear의 경우의 수 ⇒ hat, turbun, null(안 썼을 때) ⇒ 3개eyewear의 경우의 수 ⇒ sunglasses, null(안 썼을 때) ⇒ 2개3C1(headgear 경우의 수 중 1개 선택) * 2C1(..
[Java] 크리스마스 선물 [14235번] https://www.acmicpc.net/problem/14235예제 입력1502 3 2000예제 출력1-132-1문제 접근아이들을 만났을 때 가장 가치가 큰 선물을 준다 ⇒ 최대 힙입력첫 번째 줄 ⇒ 아이들 or 거점지 방문 횟수 N두 번째 줄0일 경우 아이들을 만남 ⇒ 선물 증정0이 아닐 경우 거점지에서 N개만큼의 선물 충전출력아이들을 만남 ⇒ 최대 가치 선물 출력줄 선물이 없다면 -1문제 해결단순한 최대 힙 문제0일 경우 출력, 0이 아닐 경우 N번 만큼 반복문으로 최대 힙에 값 추가기존 풀이 [메모리 : 43216 KB / 시간 : 472 ms]public static void main(String[] args) throws Exception{ StringBuilder sb = new St..
[Java] 최소 힙 [1927번] https://www.acmicpc.net/problem/1927예제 입력1901234567812000032예제 출력1012123456780문제 접근값을 입력하고, 출력 명령 시 가장 작은 값을 출력하는 문제전형적인 최소 힙 문제입력 ⇒ 연산 개수 N / 2 ~ N+1번째 줄 ⇒ 자연수 일 시 추가, 0일시 출력자연수는 2^31보다 작으므로 정확히 int의 max사이즈까지 입력 됨→ long을 쓰지 않아도 됨출력 ⇒ 0이 주어진 횟수 만큼 출력, 비어있을 경우 0 출력문제 해결우선순위 큐로 minHeap을 선언0이 아닐 경우 추가, 0일 경우 출력 및 제거기존 풀이 [메모리 : 26420 KB / 시간 : 320 ms]public static void main(String[] args) throws Ex..
[Java] 센티와 마법의 뿅망치 [19638번] https://www.acmicpc.net/problem/19638예제 입력11 10 120예제 출력1NO10예제 입력22 10 31632예제 출력2YES3예제 입력32 10 31278예제 출력3NO15예제 입력41 1 1000001예제 출력4NO1문제 접근마법의 뿅망치를 사용해서 센티보다 키를 작게 할 수 있는지 판단하는 프로그램단, 1보다 작아질 수 없음입력첫째줄 ⇒ 거인의 인구수 N / 센티의 키 H / 마법의 뿅망치 횟수 T둘째줄 ~ N+1번째줄 ⇒ 거인의 키출력가능 ⇒ YES / 마법의 망치 사용 횟수불가능 ⇒ NO / 제일 큰 거인의 키문제 해결최대 힙으로 간단히 풀 수 있는 문제최대 힙의 값이 센티보다 크다면 마법의 망치 사용 횟수 1 감소 → 최대 힙 / 2한 값을 다시 추가최대 힙의 값이..
[Java] 요세푸스 문제 [1158번] https://www.acmicpc.net/problem/1158예제 입력17 3예제 출력1문제 접근1 ~ N까지 원을 그리고 K번째마다 빼서 별도 저장원이 모두 사라질 때까지 반복문제 해결1 ~ N번까지 Queue에 추가하여 Queue 셋팅K-1번을 빼고 다시 Queue에 추가K번은 빼고 StringBuilder에 추가기존 풀이 [메모리 : 294824 KB / 시간 : 576 ms]public static void main(String[] args) throws Exception{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br...