반응형

Coding Test Study/Programmers 20

[Java] n번 숫자 세고 말하기

1. 문제 'n번 숫자 세고 말하기' 프로그램을 구현해야 한다. n번 숫자 세고 말하기는, '숫자 세고 말하기'를 총 n번 반복하는 프로그램으로, '숫자 세고 말하기'는 아래와 같이 정의한다. 입력된 숫자의 각 자릿수를 보고 어떤 숫자가 몇개씩 있는지 센다. 작은 숫자부터 순서대로 해당 숫자와 갯수를 나열하여 숫자를 만든다. 예를 들어, 입력인 숫자 num이 15223인 경우 1이 1개, 2가 2개, 3이 1개, 5가 1개이므로, 그 출력ㅇ느 11223151이 된다. 숫자 세고 말하기를 반복하게 될 경우 마지막 출력을 입력으로 한다. 즉, 입력이 15223이고, '2번 세고 말하기'를 할 경우 15223 -> 11223151 -> 14223151 위 과정을 거쳐 최종 출력은 14223151 이 된다. 단..

[Java] 네비게이션 테스트 - 최단 거리

1. 문제 네이게이션 시스템을 개발하기 위해 최단 거리를 계산하는 프로그램을 만들고 테스트하려 한다. 최단 거리를 계산하고자 하는 공간에는 총 N 개의 장소가 존재한다. a 번째 장소에서 b 번째 장소로 이동하는 데에 걸리는 시간 time 이 edge[i] = {a, b, time} 로 주어진다고 하자. 당신은 0 번째 장소에 있다고 할 때, 최단 거리로 도달하는 데에 가장 오래 걸리는 장소의 인덱스를 출력하시오. 단, 정답이 여럿일 경우 더 작은 인덱스를 반환하시오. 2. 입력설명 0 < N a[0]) ); int[] distances = new int[N]; Arrays.fill(distances, Integer.MAX_VALUE); pq.offer(new int[]{0, node}); distanc..

[Java] 거꾸로 BFS

1. 문제 이진 트리 자료구조를 순회하는 새로운 알고리즘을 설계하였고, 그것을 '거꾸로 BFS'라고 지었다. 기존의 BFS는 가장 상위 노드인 루트 노드부터, 깊이 순서대로 노트를 순회하는 방법이다. 또한 순회의 순서는 왼쪽부터 오른쪽으로 이루어졌다. '거꾸로 BFS' 순회 방법은 가장 하위 노드인 리프 노드부터 시작한다. 각 리프 노드를 오른쪽부터 왼쪽 순으로 순회한다. 그 다음에는 이미 순회한 리프 노드를 제거하고, 나머지 부분 트리에서 리프 노드를 오른쪽부터 왼쪽 순으로 순회한다. 위 과정을 모든 노드를 순회할 때까지 반복한다. 전체 노드의 수가 N 으로 주어지며, 부모-자식 관계가 left[i] = { 부모노드의 인덱스, 왼쪽 자식노드의 인덱스} , right[i] = {부모 노드의 인덱스, 오른..

[Java] 자릿수 교환을 통한 최댓값 찾기

1. 문제 숫자 num 이 주어졌을 때, 최대 한 번의 자릿수 교환을 통해 최대의 숫자를 만들어 내려고 한다. 즉, 자릿수를 교환하지 않았을 때가 더 큰 숫자일 경우, 원래 숫자를 그대로 출력한다. 2. 입력 설명 10 = maxVal) { maxVal = digits[i]; maxIdx = i; } } // 큰 자릿수부터 교체할 maxVal 보다 작은 숫자를 찾는다. // 더 작은 숫자를 발견하면 swap 하고 반환 // 시간복잡도 : O(n) for (int i = 0; i < increaseIdx; i++) { if(digits[i] < maxVal) { digits[maxIdx] = digits[i]; digits[i] = maxVal; return Integer.parseInt(String.va..

[Java] 전광판 컨트롤

1. 문제 전광판에서 숫자를 출력하게 되는데, 전광판은 총 5줄로 되어 있으며 숫자는 아래 그림과 같이 표현한다. 위와 같이 각 숫자는 '#' 와 '-'로 표현되며, 각 숫자 사이에는 위와 같이 공백으로 구분된다. 이 때, 숫자 n을 입력받아 전광판의 각 라인에 출력할 내용을 순서대로 배열로 반환하는 프로그램을 작성하시오. 2. 입력 설명 0

[Coding/Programmers] 배열 회전시키기

1. 문제 2. 코드 구현 부분 direction 이 "left" 이면 numbers 배열의 제일 첫 데이터를 tmp 변수에 임시로 저장한다. 그 후 numbers 배열의 인덱스 1에 있는 데이터부터 answer 배열의 0번째 인덱스에 저장한다. 이후 tmp에 저장한 데이터를 answer 배열 가장 마지막에 저장한다. direction 이 "right"라면 numbers배열의 가장 마지막 데이터를 tmp 변수에 임시로 저장한다. numbers 배열의 인덱스 0에 있는 데이터부터 answer 배열의 1번째 인덱스에 저장한다. 이후 tmp 변수에 저장한 데이터를 answer 배열의 가장 처음에 저장한다. class Solution { public int[] solution(int[] numbers, Stri..

[Coding/Programmers] 한 번만 등장한 문자

1. 문제 2. 코드 구현 부분 정수형 배열을 알파벳의 갯수만큼 생성하였다. 문자열 s의 한 글자씩 반복문을 통해 일치하는 인덱스의 값을 1씩 증가시켰고 반복문이 종료되었을 때 정수형배열 인덱스 위치의 값이 1인 문자를 answer 에 추가하였다. class Solution { public String solution(String s) { String answer = ""; final int ALPHABET = 26; int[] arr = new int[ALPHABET]; for (int i=0;i

[Coding/Programmers] 숫자 문자열과 영단어

1. 구현할 방식 문자열 s 내부에 "zero" , ... , "nine" 의 문자가 포함되어 있는지를 파악하기 위해 contains() 메서드를 사용한다. 만약 문자열 내부에 문자가 포함되어 있다면 그 문자에 해당하는 숫자값으로 변환하기 위해 replace() 메서드를 사용한다. 2. 코드 구현 부분 class Solution { public int solution(String s) { String[] arr = {"zero","one","two","three","four","five","six","seven","eight","nine"}; for (int i = 0; i

반응형