문제
문제가 너무 길어서 링크를 남긴다.
https://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
풀이코드
public int[] solution(int n, String[] words) { //영어 끝말잇기
int[] answer = {0,0};
if(words[0].length() == 1){ //만약 처음의 단어 길이가 1이면 그대로 return
answer[0] = 1;
answer[1] = 1;
return answer;
}else { //처음의 단어 길이가 1이 아닐 경우,
char first; //first에 단어의 첫글자를 넣을 변수를 선언
char last = words[0].charAt(words[0].length() - 1); //last에 단어의 마지막 글자를 넣고
Set<String> set = new HashSet<String>(); //중복을 체크할 set을 선언
set.add(words[0]); //set에 첫번째 단어를 넣는다.
for (int i = 1; i < words.length; i++) { //두번째 단어부터 check
set.add(words[i]); //set에 단어를 넣고
first = words[i].charAt(0); //first에 단어의 첫글자를 넣는다.
if (last != first || set.size() != i + 1 || words[i].length()==1) { //설명 참고
answer[0] = (i % n) + 1; //index%n로 몇번째 사람인지 구하고 그게 index값이므로 +1
answer[1] = (i / n) + 1; //index/n으로 몇 번 반복했는지 구하고 그게 index값이므로 +1
break;
}
last = words[i].charAt(words[i].length() - 1); //last에 단어의 마지막 글자를 넣는다.
}
}
return answer;
}
이것이 따질 것이 많아 까다로운 문제라서 문제를 풀고 나서 내 풀이코드보다 좋은 코드가 있나 싶어서 다른 사람들의 코드를 봤다.
근데 사람들이 왜

5번 조건을 아무도 안따지고 풀었는지... 테스트 케이스로 한 글자인 단어가 제일 처음있을 때, 혹은 중간에 있을 때를
대입해봤더니 다른 사람의 풀이코드중에 맞는 것이 몇 개 없었다...
그래서 내 풀이는 우선 한 글자인 단어가 제일 처음에 있을 경우 바로 return을 해주고
그게 아닐 경우를 가정해서 풀었고 나머지는 주석의 풀이를 보면 되지만
if (last != first || set.size() != i + 1 || words[i].length()==1) { //설명 참고
answer[0] = (i % n) + 1;
answer[1] = (i / n) + 1;
break;
}
이 부분은
last != first -> 그 전단어의 마지막 부분과 지금 단어의 첫번째가 다를 경우
set.size() != i + 1 -> set에 저장한 단어들이 중복되서 i+1과 다를 경우
words[i].length()==1 -> 단어가 한 글자인 경우
이 3가지 경우에는 바로 answer배열에 값들을 넣어주고 반복문을 탈출하고 answer을 return한다.
'프로그래머스 > Level 2' 카테고리의 다른 글
| [프로그래머스][Level2][Java] 짝지어 제거하기 (0) | 2022.04.14 |
|---|---|
| [프로그래머스][Level2][Java] 점프와 순간이동 (0) | 2022.04.08 |
| [프로그래머스][Level2][Java] n^2배열 자르기 (0) | 2022.04.04 |
| [프로그래머스][Level2][Java] 스킬트리 (0) | 2022.04.01 |
| [프로그래머스][Level2][Java] 방문 길이 (0) | 2022.04.01 |