728x90
반응형
2021.12.05
75번째 포스팅
입사 273일차.
코테 문제풀이 9주차 1번 문제
0. 문제
① Summer/Winter Coding(~2018) : 영어 끝말잇기
② 설명
문제설명 1부터 n까지 번호가 붙어있는 n명의 사람이 영어 끝말잇기를 하고 있습니다. 영어 끝말잇기는 다음과 같은 규칙으로 진행됩니다.
tank → kick → know → wheel → land → dream → mother → robot → tank 위 끝말잇기는 다음과 같이 진행됩니다.
사람의 수 n과 사람들이 순서대로 말한 단어 words 가 매개변수로 주어질 때, 가장 먼저 탈락하는 사람의 번호와 그 사람이 자신의 몇 번째 차례에 탈락하는지를 구해서 return 하도록 solution 함수를 완성해주세요. 제한 사항
|
③ 링크
1. 접근방법
생각해낸 방법은 2가지
① Queue를 이용
② HashMap을 이용
2. 풀이
① 접근방법 : ②
② 풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
import java.util.*;
class Solution {
/*
* 시작시간 : 20:45
* 종료시간 : 21:38
*/
public int[] solution(int n, String[] words) {
int[] answer = relayWord(n, words);
return answer;
}
public int[] relayWord(int n, String[] words) {
HashMap<Integer, String> map = new HashMap<>();
int[] answer = {0, 0};
for(int i = 0; i < words.length; i++) {
// 1. 새로 입력되는 단어가 중복되는지 체크
if(map.containsValue(words[i])) {
map.put(i + 1, words[i]);
answer[0] = (i + 1) % n;
answer[1] = (i + 1) / n;
// 1-1. n으로 나누어 떨어지는 사람의 번호는 n
// 1-2. n으로 나누어 떨어지지 않으면 차례 + 1
if(answer[0] == 0) { answer[0] = n; }
else { answer[1]++; }
return answer;
}
// 2. 끝말잇기의 룰에 어긋나는지 체크
else if (!map.isEmpty() && !map.get(i).substring(map.get(i).length() - 1).equals(words[i].substring(0, 1))) {
map.put(i + 1, words[i]);
answer[0] = (i + 1) % n;
answer[1] = (i + 1) / n;
if(answer[0] == 0) { answer[0] = n; }
else { answer[1]++; }
return answer;
}
map.put(i + 1, words[i]);
}
return answer;
}
}
|
cs |
3. 결과
4. 주의사항
① 차례와 번호를 바꿔줘야 하는 케이스에 대한 예외처리
728x90
반응형
'코딩테스트' 카테고리의 다른 글
[코테/JAVA] 연습문제 : 문자열 내 마음대로 정렬하기 (2) | 2022.01.03 |
---|---|
[코테/JAVA] 연습문제 : 문자열 내 p와 y의 개수 (0) | 2022.01.02 |
[코테/JAVA] 해시 : 전화번호 목록 (0) | 2021.11.29 |
[코테/JAVA] 힙(Heap) : 더 맵게 (0) | 2021.11.28 |
[코테/JAVA] 연습문제 : 가운데 글자 가져오기 (0) | 2021.11.24 |
댓글