(Java)프로그래머스 - 영어 끝말잇기

윤준혁·2024년 3월 27일

나의 풀이

import java.util.*;

class Solution {
    public int[] solution(int n, String[] words) {
        HashMap<String, Integer> map = new HashMap<>();
        int player = 0;
        int turn = 0;
        
        for (int i = 0; i < words.length; i++) {
            if (i > 0 && words[i-1].charAt(words[i-1].length() - 1) != words[i].charAt(0)) { // 1
                player = (i % n) + 1;
                turn = (i / n) + 1;
                return new int[]{player, turn};
            }
            
            if (map.containsKey(words[i])) { // 2
                player = (i % n) + 1;
                turn = (i / n) + 1;
                return new int[]{player, turn};
            }
            
            map.put(words[i], i); // 3
        }
        
        return new int[]{0, 0}; // 4
    }
}

과정

  1. 두번째 words부터 앞의 words의 마지막 글자와 현재 words의 첫 글자가 같지 않으면 i를 n으로 나눈 나머지와 몫에 1을 더해서 반환
  2. i번째 words가 map에 있다면 i를 n으로 나눈 나머지와 몫에 1을 더해서 반환
  3. 두 조건 모두 해당되지 않으면 map에 삽입
  4. for문에서 반환되지 않았다면 0, 0 리턴

다른 사람 풀이

import java.util.HashSet;

class Solution {


    public int[] solution(int n, String[] words) {
      int[] answer = { 0, 0 };
        char chEnd = words[0].charAt(words[0].length() - 1);
        char chStart;
        System.out.print(chEnd + " ");
        HashSet<String> log = new HashSet<>();
        log.add(words[0]);
        for (int i = 1; i < words.length; i++) {
            chStart = words[i].charAt(0);
            log.add(words[i]);
            if (chEnd != chStart || log.size() != i + 1) {
                System.out.print(i + 1 + "!");
                answer[0] = (i % n)+1;
                answer[1] = (i / n) + 1;
                break;
            }

            chEnd = words[i].charAt(words[i].length() - 1);
            System.out.print(chEnd + " ");
        }
        System.out.println();
        System.out.println("(" + answer[0] + ", " + answer[1] + ")");
        return answer;
    }
}

0개의 댓글