Day10

피오·2021년 11월 12일
0
post-thumbnail

오늘은 알고리즘 문제를 풀며 배운 것들을 기록.

  • 정렬, 중복제거를 구현해야 할 때 stream을 이용하기보다는 TreeSet을 이용해보자.
    Set이므로 중복이 제거되고, TreeSet은 자동으로 정렬도 된다.
  • 격자 문제를 풀 때 꼭 2중 배열에서 x축 y축 위치가 헷갈리는데 잊지 말자.
    int[y축인덱스][x축인덱스]
  • A배열의 길이만큼 반복문을 돌리면서 B배열은 자신의 요소를 계속해서 순회해야 한다면 % 나머지 연산자를 잘 활용해보자. 나는 재귀로 접근했었는데, 이 방식이 훨씬 좋은 것 같다.
ex)
	int[] first = {1,2,3,4,5};
        int[] second = {2,1,2,3,2,4,2,5};
        int[] third = {3,3,1,1,2,2,4,4,5,5};
        int[] scores = {0,0,0};
        
	// answer배열 길이만큼 순회하며 first, second, third 요소를 계속해서 돌며 어떤 작업을 해야 할 때,
    	// % 나머지 연산자로 인덱스를 뽑아내면 재귀를 사용할 필요가 없었던 문제.
	for(int i = 0; i < answers.length; i++) {
            if(first[i % 5] == answers[i]){ scores[0]++;}
            if(second[i % 8] == answers[i]){ scores[1]++;}
            if(third[i % 10] == answers[i]){ scores[2]++;}
        }



회고

알고리즘 문제를 풀면서 코드를 짜다보면 이거 아닌 거 같다는 느낌이 들 때가 있다.. 어떻게든 풀어보겠다고 용쓰는 것은 좋으나 투입한 시간만큼 학습 효과는 뽑아내야 할 게 아닌가? 종일 붙들지 말고 적당히 고민했으면 더 나은 코드를 찾아나서자. 배운 걸로 다음 문제 더 잘 풀면 되지. 고수들 코드로 기초를 빨리 익히자.

그리고 배열 <-> 컬렉션 스위칭할 수 있는 api는 꼭 숙달시켜놓고( https://codechacha.com/ko/java-convert-set-to-list-and-list-to-set/ ), 문제 요건을 똑바로 보자.



참고

profile
블로그 이전했습니다. https://pzbg.tistory.com/

0개의 댓글