
사람의 수 n과 사람들이 순서대로 말한 단어 words 가 매개변수로 주어질 때, 가장 먼저 탈락하는 사람의 번호와 그 사람이 자신의 몇 번째 차례에 탈락하는지를 구해서 return 하도록 solution 함수를 완성해주세요.
예시
n = 3일 때,
tank → kick → know → wheel → land → dream → mother → robot → tank 순으로 말한다고 한다면,
사람1 사람2 사람3 사람1 사람2 사람3 사람1 사람2 사람3
3번째 사람이 3번째 말할 때, 중복된 단어를 말해서 탈락한다.
따라서 출력되는 값은 [3, 3] 이다.
풀이과정
- 주어진 단어들을 하나씩 검사한다.
- 일단 첫번째로 들어온 문자열이면 검사 없이 set에 집어넣고 마지막 문자를 저장한다.
- 다음 문자열부터 (끝말이 이어지는지 검사)하고 (중복된 문자열인지) 확인한다.
- 3번 조건에 걸린다면 해당 문자열을 몇번째 사람이 말했고, 그 사람이 몇번째로 말한 단어인지 계산한다.
- 몇번째 사람이 말했는지
-> n명이 돌아가면서 말하기 때문에 i%n+1이다.
( * 사람 수를 1부터 세기 때문에 i%n값에 +1을 해준다.) - 몇 번째로 말한 단어인지
-> n명 말하고, 그 다음 n명이 다시 말하고, .. 로 반복되므로 i/n의 몫+1이다.
( * 몇 번째로 말한 것인지도 1부터 세기 시작하므로 +1해준 것임.) - 탈락하는 사람이 없다면 초기화 했던 값 [0,0]을 반환하고, 그렇지 않다면 4-6에 걸쳐서 계산한 값을 반환한다.
전체 코드
import java.util.*;
class Solution {
public int[] solution(int n, String[] words) {
int[] answer = {0,0};
Set<String> set = new HashSet<>(); //단어의 중복 확인 set.
char last='r'; //마지막 글자
for(int i=0;i<words.length;i++){
if(i!=0){//첫번째 단어가 아니고
//마지막 글자가 이어지지 않거나 중복된 단어이면
if(words[i].charAt(0)!=last ||
set.contains(words[i])){
answer[0]=i%n+1; //몇번째 사람인지 구하고, (0,1,2)번째 사람->(1,2,3)
answer[1]=i/n+1; //몇번째 차례인지
System.out.println(words[i]);
break;
}
}
set.add(words[i]);//단어 중복 확인하기 위해 저장
last = words[i].charAt(words[i].length()-1);//마지막 글자 저장
}
return answer;
}
}'Algorithms(CT)' 카테고리의 다른 글
| [프로그래머스][Java] Lv.3 여행경로 (0) | 2023.06.12 |
|---|---|
| [프로그래머스][Java] Lv.3 단어 변환 (0) | 2023.06.11 |
| [프로그래머스][Java] Lv.2 게임 맵 최단거리 (0) | 2023.06.09 |
| [프로그래머스][Java] Lv.2 짝지어 제거하기 (0) | 2023.06.08 |
| [프로그래머스][Java] Lv.2 피보나치 수 (0) | 2023.06.07 |