코딩테스트 99

[2023-01-11]

Start Dominator 문제 배열에서 가장 많이 나온 요소의 인덱스를 찾는 문제. 정확도에서 문제가 있었는데.. 빈 배열에 대한 처리를 해주지 않아서 그런가 싶다 빈배열 처리를 해줘도 문제가 풀리지 않는다.. 위와 같이 해서 문제를 풀었다. 1. 빈 배열을 처리를 하지 않아서 문제가 되었다. 2. dominator는 배열의 절반을 넘어서는 요소를 말하는 건데 처음 구현했을 때는 배열의 절반 이상으로 해서 문제가 되었다.

코딩테스트 2023.01.12

[2023-01-08]

Start Brackets 문제 스택하면 많이 만나게 되는 괄호 문제였다. 그렇다고 잘 풀거라는 뜻은 아니고.. 반례에 대한 고려를 전혀 하지 않아서 그런 것 같다 내가 한 반례 처리는 오로지 empty일 경우만.. 했다.. 찾아보니 peek을 했을 때 stack의 크기가 0일 경우 EmptyStackException 예외를 던진다. 그러니까 내 코드에서 닫힘 괄호({, (, [)가 빈 문자열에 들어가는 경우 런타임에러가 났을 거다. stack이 empty가 아닐 경우에만 peek 메소드를 호출하도록 조건을 추가해주니 통과했다. Fish 문제 아래로 내려오는 물고기(1)와 위로 올라가는 물고기(0)를 고려하기 위해 위로 올라가는 물고기 직전에 아래로 내려오는 물고기가 있을 경우에만 조건 고려하도록 했다...

코딩테스트 2023.01.09

[2023-01-03]

Start PassingCars 문제 아래는 어제 상태이다.. 이중 for문이 돌아가고 있어서 시간복잡도는 O(n^2)인 아주 여므벼으인 상태이다. 얼른 마저 풀어보겠습니당.. 성능 테스트 20%가 나왔는데 result가 1,000,000,000 일 경우 -1 처리 해주는 부분 때문인 것 같다. 지금 이 레슨을 극복하지 못하는 이유는 커다란 입력 범위와 타이트한 시간 제한에 비해 시간복잡도가 너무 크다는 점이다. 커다란 입력 범위를 줄일 수 있다고 판단되는 로직을 짜보고 있는 중이다. 위와 같이 짠 이유는 0과 1이 반반일 경우 이중 for문으로 돌게 되는 값이 원래 코드에서는 n * n = n ** 2였지만 (n/2) * (n/2) = n**2 / 4 가 될 것이라고 생각했다. 물론 위처럼 0과 1이 ..

코딩테스트 2023.01.03

[2023-01-01]

FrogJmp 문제 입력 범위가 1부터 10억까지이기 때문에 X와 Y가 각각 1과 10억이고 D가 1로 입력값이 들어오고 반복문을 돌려서 체크하게 되면 10억번 반복문이 돌아간다. 따라서 문제 그대로 구현하기보다는 최대한 반복문을 안 쓸 수 있는 방법을 택하는 것이 좋겠다. PermMissingElem 문제 배열 원소 구성은 1부터 N+1로 되어있고 배열의 크기가 4라면 1 ~ 5로 구성되어 있다는 의미이다. 1부터 N + 1이 배열에 있는지 찾으려면 이중 for문으로 이루어져야 할 것이라고 생각했다. 시작값이 1이고 끝나는 값이 N+1인 for문이 하나 돌고 array에 1 ~ N+1이 있는지 확인하기 위한 for문이 돌아서 총 2개 최악의 경우 N이 100,000 100,000 * 100,000 일 ..

코딩테스트 2023.01.01

[2022-12-27]

문제가 어렵지는 않았던 것 같은데 왜 어제는 그렇게 풀었나 싶다. 수와 수 사이에 짝을 이루게 되면 홀수 크기의 배열에서 짝수 개의 값과 홀수 개의 값으로 나누어지게 될 것이다. -> 코드 로직 아래는 OddOccurrencesInArray에 대한 O(n) 정답 코드이다. // you can also use imports, for example: import java.util.*; // you can write to stdout for debugging purposes, e.g. // System.out.println("this is a debug message"); class Solution { public int solution(int[] A) { int result = 0; Map map = new..

코딩테스트 2022.12.28