TIL 12/27

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

TIL

목록 보기
39/80

오늘도 여전히 알고리즘을 풀었다.
조금 풀리기 시작하니까 알고리즘 풀이가 재밌다.
https://school.programmers.co.kr/learn/courses/30/lessons/12915
어제 이 문제를 풀지 못했는데, 풀이 자체는 생각보다 간단했다.
역시, 함수 하나로 푸는 문제가 맞았다.

Arrays.sort(substrings,((o1, o2) -> {
	if (Objects.equals(o1[1], o2[1])){
    	return CharSequence.compare(o1[0] ,o2[0]);
    }   else 
    	return CharSequence.compare(o1[1] , o2[1]);

이 코드를 추가해서 n으로 자른 글자대로 오름차순으로 정렬을 하면서, 동시에 기존의 문자열도 n으로 자른 글자의 오름차순으로 정렬이 되었다.
이후 기존 문자열인[i][0]를 리턴해서 간단하게 풀었다.
이 문제를 풀고 탄력 받은 느낌을 받아 다른문제도 풀었다.

https://school.programmers.co.kr/learn/courses/30/lessons/17681
이 문제는 레벨1이길래 과연 풀 수 있을까 싶었는데, 어떻게 되긴 했다.
물론 노가다로 풀어서 이게 맞나 싶긴 한데, 그래도 푼게 어디야.

풀고나서 보니까, 배열을3개, 이차원배열을 6개 사용했다.

처음에 시도할때, NumberFormatException도 뜨고 NullPointerException 도 뜨고 해서 아.... 역시 무리인가? 싶어서 일단 싹 다 주석 처리 하고, 하나 하나 해보자 하는 식으로 코드 하나 하나 실행을 해보았다.
그랬더니 처음에

for (int i = 0; i < n; i++) {
	binaryA[i] = Integer.toBinaryString(arr1[i]);
	binaryB[i] = Integer.toBinaryString(arr2[i]);

이 부분이 문제였다.
정확히 말하면 이 부분을 실행 한 후에, n의 자리를 가진 수가 나와야 하는데, 2진법이라 앞에가 0이면 사라져서 01010 와 같은 식으로 나왔어야 할 숫자가 1010으로 나와서 문제가 발생했던 것이었다.

그래서 밑에서 while문을 돌려서 앞에 부족한 0의 개수만큼 채워주니 문제가 해결되었다.
그런 다음, 하나씩 주석을 풀어가며 확인을 해봤더니 마지막 줄에서도 문제가 발생했다.
String.join을 제대로 몰라서 문제가 발생했다.

for (int i = 0; i < n; i++) {
	answer[i] = String.join("",binaryArraySumToString[i]);
}

이런식으로 join이후에 ""를 붙여주지 않았더니 오류가 발생했다.
안해도 무방하다는데, 왜 오류가 발생한지 모르겠다.

for (int i = 0; i < n; i++) {
	for (int j = 0; j < n; j++) {
		if (Objects.equals(binaryArraySumToString[i][j], "0")){
        	binaryArraySumToString[i][j] = " ";
        }else binaryArraySumToString[i][j] = "#";
    }
}

이건 처음에는 ""으로만 나오다가 나중에 돌려보니 정상적으로 작동이 되었는데 이건 왜그런지 진짜 모르겠다.

그래도 이 문제 풀고 나서, 다른 문제를 풀어보니, 굉장히 쉽게 느껴졌다.
물론 정말로 난이도가 낮은 문제였긴 했지만, 그래도 조금 어려운 문제를 풀어보니 조금 자신감이 붙은 것 같다.
이제 Spring만 잘하면 될거같은데.....

0개의 댓글