본문 바로가기
Language/알고리즘 문제풀이

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

by wakestand 2019. 9. 18.
반응형

사이트명 : 프로그래머스(Programmers)

문제명 : 영어 끝말잇기

언어 : 자바(Java)

 

이 끝말잇기에서 n이 사람 수인 만큼

사람들이 모두 말하면 차례가 1 올라가는 거고

 

끝말잇기에서 걸리는 조건은

1. 새로 말하는 단어의 첫 글자가 이전 단어의 마지막 글자와 다르거나

2. 이미 말한 단어를 또 말하는 경우

 

이 두가지만 확인해주면 되는데

여기서 아무도 걸리지 않았다면 0,0 을 반환하면 된다

 

내 풀이방법은 다음과 같다

 

일단 for 문을 돌리면서 두번째 차례부터 이전 단어와 지금 단어의 마지막 글자, 첫 글자를 비교해 주고

만약 다르다면 사람과 횟수를 넣어서 바로 break; 시킨다

 

다음으로 말하려는 단어는 list.contain을 통해 식별 가능한데

여기서 중복된 단어를 말하면 바로 사람과 횟수를 넣어서 break; 시킨다

 

여기까지 안 걸렸다면 list에 단어를 넣어주고

사람 수가 마지막까지 돌아오면 다시 처음으로 돌려주면서

차례(turn)를 올려주면 된다

 

프로그래머스에 바로 적용 가능한 코드는 아래와 같다

import java.util.LinkedList;
class Solution {
    public int[] solution(int n, String[] words) {
        int[] answer = new int[2];
        int people = 0;
        int turn = 1;
        LinkedList<String> list = new LinkedList<>();
        
        for(int i = 0; i<words.length; i++) {
        	people++; // people은 0이 없음
        	
        	if(i>0) { // 앞, 뒷 단어 체크
        		if(list.get(i-1).charAt(list.get(i-1).length() - 1) != words[i].charAt(0)) {
        			answer[0] = people;
        			answer[1] = turn;
        			break;
        		}
        	}
        	
        	if(list.contains(words[i])) { // 중복 체크
        		answer[0] = people;
        		answer[1] = turn;
        		break;
        	}
        	
        	list.add(words[i]);        	
        	
        	if(people == n) { // people 처음부터
        		people = 0;
        		turn++;
        	}
        }
        
        return answer;
    }
}
반응형

댓글