알고리즘

[프로그래머스, 자바] 외계어 사전

hminor 2024. 3. 15. 19:26

풀이

  • 해당 문제는 파이썬으로는 정말 간단하고 빠르게 해결할 수 있었을텐데
  • 역시 익숙하지 않아 시간이 필요한 문제였다.
  • 배열에 대한 다양한 사용방법에 대한 것과 비교하는 방법 등에 대한 문제로 
  • 계속 익숙해져야 할 문제인 것 같으며,
  • 해결 방법으로는 spell 크기 만큼 0 값으로 채운 check와
  • dic을 반복할때 마다 1로 채운 li를 생성한 다음
  • 문자를 char 형태로 만든 배열을 만들고 이후 비교하면서 같다면 li에 특정 문자의 인덱스 위치에 -1씩 차감하고
  • 이후 check,li의 배열을 비교하기 위해 Arrays.equals()를 사용하려는데 
  • 여기서 Collections.nCopies() 사용하면 고정된 배열을 사용하는 것이기에
  • toArray()로 다시 배열 형태로 만들어서 비교하여 해결

 

class Solution {
    public int solution(String[] spell, String[] dic) {
        List<Integer> check = new ArrayList<>(Collections.nCopies(spell.length, 0)); // 체크 배열
        for (String d: dic) {

            List<Integer> li = new ArrayList<>(Collections.nCopies(spell.length, 1)); // 카운팅 배열
            char[] ch_li = d.toCharArray(); // 문자 배열

            for (int i=0; i < ch_li.length; i++) {
                for (int j=0; j<spell.length; j++) {
                    if (ch_li[i] == spell[j].charAt(0)) li.set(j,li.get(j)-1);
                }
            }
            if (Arrays.equals(check.toArray(), li.toArray())) return 1;
        }
        return 2;
    }
}