728x90
[문제 링크]
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
import java.util.*;
class Solution {
public int[] solution(int n, String[] words) {
//중복되지 않은 단어 저장 할 리스트
ArrayList<String> wordlist = new ArrayList<>();
//처음 시작
wordlist.add(words[0]);
for(int i = 1; i < words.length; i++){
//중복 단어 찾기
if(wordlist.contains(words[i])) {
return new int[] {(i%n) + 1,(i/n) + 1};
}
else {wordlist.add(words[i]);}
//틀린 끝말잇기 찾기
if(words[i-1].charAt(words[i-1].length() - 1) != words[i].charAt(0)){
return new int[] {(i%n) + 1,(i/n) + 1};
}
}
//탈락자 생기지 않는 경우
return new int[] {0,0};
}
}
[접근법]
- 중복되지 않은 단어를 저장 할 리스트(wordlist) 생성 후, 맨 처음 단어를 저장한다.
- 리스트에 단어가 포함되어 있는지 확인한다. 즉, 중복을 체크한다.
- 중복되지 않으면, 리스트에 추가하여 계속 중복 체크를 한다.
- 중복된다면, 결과를 반환한다.
- 이전 인덱스 단어의 마지막 글자와 현재 인덱스의 첫번 째 글자를 비교한다.
- 같지 않다면, 규칙을 어긴 것이므로 결과를 반환한다.
- 2와 3번에 모두 걸리지 않다면, 탈락자가 없는 것이므로 [0,0]을 반환한다.
- 결과는 탈락자가 발생한 시점(i)을 인원 수(n)로 나누고,
- 번호는 나머지 +1,
- 차례는 몫 +1 을 반환한다.
규칙을 잘 찾고,
charAt()에 대해 알고있다면
쉽게 풀 수 있는 문제이다.
728x90
'💻코딩 > 💡Programmers' 카테고리의 다른 글
[프로그래머스|JAVA] 연속 부분 수열 합의 개수 | Set, HashSet 활용 (1) | 2025.04.26 |
---|---|
[프래그래머스|JAVA] 예상 대진표 (1) | 2025.04.23 |
[프로그래머스|JAVA] N개의 최소공배수 | gcd(), lcm() (1) | 2025.04.16 |
[프로그래머스|JAVA] 멀리 뛰기 | 동적 계획법 (DP: Dynamic Programming) (1) | 2025.04.08 |
[프로그래머스|JAVA] 귤 고르기 | int[] -> ArrayList<Integer> (0) | 2025.04.05 |