TIL 12/28

드립이 블로그·2022년 12월 28일
0

TIL

목록 보기
40/80

이제 밀린 알고리즘 다풀었다
생각보다 금방 했다.
막힌거 하나 풀면 다른 문제 2~3개씩 풀리고 하다보니 금방 한것같다.
오늘은
https://school.programmers.co.kr/learn/courses/30/lessons/12947
이 문제와
https://school.programmers.co.kr/learn/courses/30/lessons/42748
이 문제에서 애를 좀 먹었다.

우선
https://school.programmers.co.kr/learn/courses/30/lessons/12947
이 문제에서는
charAt()을 사용하다가 애를 많이 먹었다.
맞게 한것 같은데 계속 실패를 해서, psvm 으로 코드를 돌려보았다.
실험삼아 100이라는 숫자를 charAt으로 나누고, sout으로 찍어봤더니
1은 49, 0은 48이라는 숫자가 찍혔다.
이게 왜 그런지 살펴봤더니 String 타입으로 charAt을 하면 아스키코드로 반환이 되는 것이었다.
그래서 Integer.parseInt로 int타입으로 바꿔주니 정상작동하였다.
진짜 영문도 모르고 48나와서 당황했던 문제다.

그리고
https://school.programmers.co.kr/learn/courses/30/lessons/42748
이문제는 다른 값은 잘 나오는데 commands[i][0]와 commands[i][1]가 같을 때 값이 이상하게 나와서 한참 애먹었다.
처음에 풀 때는

if (j >= commands[i][0]-1 || j < commands[i][1]){
	list.add(array[j]);

이렇게 commands[i][0]와 commands[i][1] 사이의 값을 리스트에 넣고,

for (int j = 0; j < (commands[i][1]-commands[i][0])+1; j++) {
	cutArr[j] = list.get(j);
}
Arrays.sort(cutArr);
answer[i] = cutArr[commands[i][2]-1];

리스트를 배열에 다시 담고, 정렬 후 answer에 담아 리턴했다.
다른 값들은 다 잘 나오는데, commands[i][0]와 commands[i][1]의 값이 같을 때, 값이 array[0] 이 되었다.
이유를 모르겠어서 다른 풀이를 찾아 봤는데,
Arrays.copyOfRange 라는 메소드를 찾았다.

Arrays.copyOfRange(배열, 시작인덱스, 끝인덱스)로 간편하게 배열을 복사할 수 있다는 것을 알았다.
이 메소드를 사용해서 다시 풀었는데, 이번에도 commands[i][0]와 commands[i][1]의 값이 다르게 나왔다.
이번에는 그냥 0으로 나왔다.
그래서 if문으로 commands[i][0]와 commands[i][1]값이 같은 경우 answer[i]에 array[commands[i][0]-1] 값을 적용시키고, 아닌 경우에만 Arrays.copyOfRange를 사용했더니 문제가 풀렸다.

이제 문제를 다 풀었으니, 다시 진도를 나갈 시간이다. 원래 벌써 수강을 했어야 하지만, 알고리즘 밀린거를 계속 방치하게 될 것 같아서 알고리즘부터 풀었다.
그래도 조금 잘 풀게 되었으니 강의를 봐도 그 전보다는 구조 이해가 조금 더 쉽지 않을까 기도해본다.

0개의 댓글