일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 후위 표기법
- 쿼드압축 후 개수세기
- 메뉴리뉴얼
- fragment identifier
- 완전탐색
- 조합
- Java
- 보이어무어
- 문자열
- 동적계획법
- 규칙찾기
- pandas
- 완전 탐색
- 점프와 순간이동
- 에라토스테네스의 체
- Dynamic Programming
- 순열
- 반복문
- HashMap
- 2017 카카오 코드
- 튜플
- 프로그래머스
- 영문자 확인
- 어려웠던 문제
- dfs
- HashSet
- 최소공배수
- 알고리즘
- Stack
- python
- Today
- Total
csmoon1010의 SW 블로그
[201125] 영어 끝말잇기 - Summer/Winter Coding(~2018) (level2) 본문
[201125] 영어 끝말잇기 - Summer/Winter Coding(~2018) (level2)
csmoon1010 2020. 11. 25. 18:190. 문제 유형 : 규칙찾기, 적절한 자료구조(중복 처리)
1. 문제 이해
programmers.co.kr/learn/courses/30/lessons/12981
코딩테스트 연습 - 영어 끝말잇기
3 [tank, kick, know, wheel, land, dream, mother, robot, tank] [3,3] 5 [hello, observe, effect, take, either, recognize, encourage, ensure, establish, hang, gather, refer, reference, estimate, executive] [0,0]
programmers.co.kr
(1) 주요 요구사항
규칙에 맞게 끝말잇기를 진행하여 [탈락하는 사람의 번호, 자신의 몇 번째] 를 출력
[규칙]
1. 1번부터 번호 순서대로 한 사람씩 차례대로 단어를 말합니다.
2. 마지막 사람이 단어를 말한 다음에는 다시 1번부터 시작합니다.
3. 앞사람이 말한 단어의 마지막 문자로 시작하는 단어를 말해야 합니다. → 문자 비교 필요
4. 이전에 등장했던 단어는 사용할 수 없습니다. → 중복 확인 필요
5. 한 글자인 단어는 인정되지 않습니다.
(2) 제한 사항
- n : 끝말잇기에 참여하는 사람 수 - 2이상 10이하의 자연수
- words : 끝말잇기에 사용한 단어들 - n이상 100이하의 길이
- 각 단어 길이 : 2이상 50이하
- 모든 단어는 소문자로만 이루어짐
- 탈락자가 없는 경우 : [0, 0] 출력
2. 전략
(1) 문자 비교 : 문자열의 인덱스와 charAt 이용
- 앞의 문자의 마지막 문자 : words[i-1].charAt(words[i-1].length() - 1)
- 현재 문자의 첫 문자 : words[i].charAt(words[i])
→ 둘을 비교하여 다르면 (3)으로
(2) 중복 확인 : HashSet<String>
- 한 문자를 만날때마다 HashSet에 add
- add결과 false이면 중복이 있으니 (3)으로
(3) [탈락하는 사람의 번호(index), 자신의 몇 번째(order)] 구하는 방법
- index = i % n + 1
(n 단위로 나눈 후의 나머지를 보면 알 수 있음)
- order = i / n + 1
(n 단위로 몇 번 나눠지는 지 몫을 보면 알 수 있음)
3. 참고 사항
4. 코드
import java.util.*;
class Solution {
public int[] solution(int n, String[] words) {
int index = 0; int order = 0;
HashSet<String> hash = new HashSet<>();
hash.add(words[0]);
for(int i = 1; i < words.length; i++){
if(words[i-1].charAt(words[i-1].length()-1) != words[i].charAt(0) || !hash.add(words[i])){
index = i % n + 1;
order = i / n + 1;
break;
}
}
int[] answer = new int[]{index, order};
return answer;
}
}
'Coding Test > 프로그래머스' 카테고리의 다른 글
[201221] 프렌즈4블록 - 2018 KAKAO BLIND RECRUITMENT (0) | 2020.12.21 |
---|---|
[201216] 뉴스 클러스터링 - 2018 KAKAO BLIND RECRUITMENT (0) | 2020.12.16 |
[201125] 예상 대진표 - 2017 팁스타운(level2) (0) | 2020.11.25 |
[201117] 점프와 순간 이동 - Summer/Winter Coding(~2018) (level2) (0) | 2020.11.17 |
[201113] 후보키 - 2019 KAKAO BLIND RECRUITMENT(level2) ★ 비트마스크 ★ (0) | 2020.11.13 |