728x90

[문제 링크]

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 


 

import java.util.*;
class Solution {
    public int[] solution(int n, String[] words) {
        //중복되지 않은 단어 저장 할 리스트
        ArrayList<String> wordlist = new ArrayList<>();
        //처음 시작
        wordlist.add(words[0]);

        for(int i = 1; i < words.length; i++){
            //중복 단어 찾기
            if(wordlist.contains(words[i])) {
                return new int[] {(i%n) + 1,(i/n) + 1};
            }
            else {wordlist.add(words[i]);}
            
            //틀린 끝말잇기 찾기
            if(words[i-1].charAt(words[i-1].length() - 1) != words[i].charAt(0)){
                return new int[] {(i%n) + 1,(i/n) + 1};       
            }
        }
        //탈락자 생기지 않는 경우
        return new int[] {0,0};
    }
}

[접근법]

  1. 중복되지 않은 단어를 저장 할 리스트(wordlist) 생성 후, 맨 처음 단어를 저장한다.
  2. 리스트에 단어가 포함되어 있는지 확인한다. 즉, 중복을 체크한다.
    • 중복되지 않으면, 리스트에 추가하여 계속 중복 체크를 한다.
    • 중복된다면, 결과를 반환한다.
  3. 이전 인덱스 단어의 마지막 글자와 현재 인덱스의 첫번 째 글자를 비교한다.
    • 같지 않다면, 규칙을 어긴 것이므로 결과를 반환한다.
  4. 2와 3번에 모두 걸리지 않다면, 탈락자가 없는 것이므로 [0,0]을 반환한다.
  5. 결과는 탈락자가 발생한 시점(i)을 인원 수(n)로 나누고,
    • 번호는 나머지 +1, 
    • 차례는 몫 +1 을 반환한다.

 


 

규칙을 잘 찾고,

charAt()에 대해 알고있다면 

쉽게 풀 수 있는 문제이다.

 

 

 

728x90

+ Recent posts