https://school.programmers.co.kr/learn/courses/30/lessons/12981

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 풀이 (JAVA)

import java.util.*;
class Solution {
    public int[] solution(int n, String[] words) {
        int[] answer = new int[2]; // 결과 : 걸린사람, 회차

        List<String> wordlist = new ArrayList<>(); // words를 저장할 리스트
        Queue<Integer> queue = new LinkedList<>(); // 순서를 반복하기 위한 큐 선언
        int [] cnt = new int[n+1]; // 각 순서마다의 회차 기록
        for(int i=1; i<=n; i++){
            queue.offer(i); // 초기 순서 세팅
        }
        int idx=0; // words의 0번째 인덱스 선언
        char as=' '; // 이전 단어의 마지막 단어 변수
        char to=' '; // 현재 단어의 첫 번째 단어 변수
        while(idx < words.length){ // words의 배열을 다 돌떄까지 반복
            if(idx>0){ // 2번째 인덱스부터 이전 단어와 비교
                as = words[idx-1].charAt(words[idx-1].length()-1);// 이전 단어 마지막 글자
                to = words[idx].charAt(0); // 현재 단어 첫번째 글자
            }
            // 리스트에 반복되는 단어가 없고, 끝자리와 첫자리가 같은 경우만 다음 순서 반복
            if(wordlist.contains(words[idx]) != true && as==to){
                int person = queue.peek(); // 해당 순서의 사람 번호
                wordlist.add(words[idx]); // 워드 추가
                queue.offer(queue.poll()); // 순서를 가장 뒤로
                cnt[person]++; // 해당 번째 순서의 회차 기록
            }
            // 단어가 리스트에 존재하거나, 끝자리와 첫자리 단어가 다른 경우 끝말잇기 종료
            else if(wordlist.contains(words[idx]) == true || as != to){
                int person = queue.poll(); 
                cnt[person]++; // 해당 순서 회차 기록
                answer[0] = person; // 걸린 사람 번호
                answer[1] = cnt[person]; // 순서 회차
                break; // 종료
            }           
            idx++;
        }
        // 정상적으로 다 돌았다면 끌맛잇기는 정상적으로 종료된것으로 0,0 리턴
        return answer;
    }
}

주요 핵심 포인트

1. 해당 문제는 순서가 반복되는 문제로 큐를 선언해야 한다.

2. 이미 한번 반복되는 문자를 처리하기 위해 List를 선언하여 contains() 함수를 사용하였다.

3. cnt 배열을 선언하여 각 사람 번호의 회차를 기록하였다.

4. 끝자리와 첫자리가 다른 경우를 단어를 가져와 비교하였다. 단어가 다른 경우 또한 종료 대상이다.

 

개선해야할 사항

1. 테스트 결과가 통과 하지 않는 것을 보고 문제를 다시 읽어보니, 이전단어 끝자리와 현재 단어 첫자리가 다르면 리턴하도록 설계하는 것이었다. 문제를 제대로 읽지 않아 조금의 시간이 더 들었다. 그러하여 끝말잇기에 걸리는 사람의 조건은 반복되는 단어를 말하였거나 or 이전 단어와 다른 첫번째 단어를 말하였을때를 말한다.

'프로그래머스(JAVA)' 카테고리의 다른 글

주차 요금 계산  (0) 2022.07.16
문자열 압축  (0) 2022.07.09
짝지어 제거하기  (0) 2022.07.05
기능개발  (0) 2022.07.05
오픈채팅방  (0) 2022.07.03

+ Recent posts