알고리즘/프로그래머스

11/24 오답노트

이채림 2024. 11. 24. 23:36
추억 점수

 

HashMap에서 키를 가져오고 비교하기

containsKey() 또는 get()

ex.
map.containsKey(person)
map.getOrDefault(person, 0)

카드 뭉치

ArrayIndexOutOfBoundsException 오류

cards1과 cards2의 인덱스를 따로 관리한다.

        int idx1 = 0;
        int idx2 = 0;
        
        for(int i=0; i<goal.length; i++) {
            if(idx1 < cards1.length && cards1[idx1].equals(goal[i])) {
                idx1++;
            } else if(idx2 < cards2.length && cards2[idx2].equals(goal[i])) {
                idx2++;
            } else {
                return "No";
            }
        }
        return "Yes";

크기가 작은 부분 문자열

난리핑

 

런타임 에러가 발생하는 주요 원인

Integer.parseInt 사용

 문자열이 32비트 정수의 범위를 초과하면 변환 중 NumberFormatException이 발생함

 


푸드 파이트 대회

 

대칭 구조를 생성해야 하는 데 실패함

StringBuilder를 사용해서 누적한 뒤

String left = sb.toString();
String result = left + "0" + sb.reverse();

 

최종결과 1223330333221 과 같은 대칭 구조를 얻을 수 있음


콜라 문제

왕창 틀림,,

 

b가 1이라서 입출력 예시는 성공했지만, 코드에 b를 사용하지 않음 ㅋㅋ,,

문제좀제대로읽고제대로해!!!!!!!!!!


삼총사

배열에서 서로 다른 세 수의 합이 0이 되는 문제여서 투 포인터 방식을 사용했는데

입출력 예시에선 안그랬지만 테스트케이스에서 배열에 중복된 숫자가 있었나봄

동일한 결과를 여러 번 계산할 가능성이 있대

중복 처리를 해줘야 하는데 ........

 

삼총사 문제가 투포인터보다 단순히 모든 조합을 탐색하는 방식이 더 적합하다고함

        for(int i=0; i<number.length-2; i++) {
            for(int j=i+1; j<number.length-1; j++) {
                for(int k=j+1; k<number.length; k++) {
                    if(number[i] + number[j] + number[k] == 0) {
                        count++;
                    }
                }
            }
        }

없는 숫자 더하기

나는 정렬 후 인덱스랑 값 비교해서 없는 숫자를 더하려고 했는데

논리적 오류가 있었음

 

근데 그냥 간단하게 45에서 numbers의 합을 빼면 되는거였음

ㅋㅋ..


가운데 글자 가져오기

char+char를 하면 두 문자의 유니코드 값이 더해져 int 타입 결과를 반환함

char를 String으로 변환한 뒤 문자열로 연결핑

        if(n % 2 == 0) {
            return s.substring(n/2-1, n/2+1);
        } else {
            return String.valueOf(s.charAt(n/2));
        }