[프로그래머스] 영어 끝말잇기

package org.example.알고리즘.영어끝말잇기;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

class Solution {
    public static void main(String[] args) {
        Solution solution = new Solution();
        String[] words = {"tank", "kick", "know", "wheel", "land", "dream", "mother", "robot", "tank"};
        solution.solution(3, words);
        
        System.out.println(Arrays.toString(solution.solution(2, new String[]{"hello", "one", "even", "never", "now", "world", "draw"})));
    }
    
    public int[] solution(int n, String[] words) {
        int[] answer = {0, 0};
        
        Set<String> wordSet = new HashSet<>();
        
        int count = 0;
        
        char lastChar = words[0].charAt(0);
        
        loop1:
        for (int i = 0; i < words.length; i += n) {
            
            for (int j = 0; j < n; j++) {
                if (i + j >= words.length) {
                    break loop1;
                }
                
                String word = words[i + j];
                
                if (wordSet.contains(word) || lastChar != word.charAt(0)) {
                    answer = new int[]{j + 1, count + 1};
                    return answer;
                }
                lastChar = word.charAt(word.length() - 1);
                wordSet.add(word);
            }
            
            count++;
        }
        
        return answer;
    }
}
  • 그냥 단순 구현문제같다
     if (i + j >= words.length) {
                    break loop1;
                }
  • 루프를 통해 한번에 이중 for 문 탈출을 유도
    • 총 단어수를 넘어가면 OOB 가 발생한다.
if (wordSet.contains(word) || lastChar != word.charAt(0)) {
    answer = new int[]{j + 1, count + 1};
    return answer;
}
  • 마지막 문자와 다르거나, 이전에 word가 존재했다면 바로 실패시켜야한다.

Uploaded by N2T