
문제설명


입력 & 출력


나의 풀이

이번 문제는 끝말잇기 문제입니다. 흔히 알고 있는 끝말잇기 룰과 똑같습니다. 따라서 n명의 사람이 끝말잇기를 하는 데 이미 나온 단어를 말하거나, 앞사람의 끝말에 맞지 않은 단어를 말하면 탈락자가 발생합니다. 이때 탈락자의 번호와 차례를 반환하면 되는 문제입니다.
처음에는 이중 리스트를 사용하여 문제를 풀었지만 처음 부터 모든 단어를 n명에 맞게 리스트를 저장하면 메모리 효율에 문제가 있을 것 같아서 단어를 분기 처리하고, 리스트에 넣는 방식을 채택했습니다.
풀이를 설명하자면 다음과 같습니다.
먼저 최종 탈락자의 번호와 차례를 넣을 answer배열을 초기화해 줍니다. 그리고 단어를 저장할 list를 만들어주고, 전체 단어만큼 반복문을 순회해 줍니다.
그리고 contains() 메서드를 사용하여 입력된 단어가 list에 존재한다면 즉 이미 말한 단어라면 탈락자가 발생하기 때문에 해당 탈락자의 번호와 차례를 배열에 담아줍니다.
n이 만약에 3이고, 모든 단어가 다음과 같다면
["tank", "kick", "know", "wheel", "land", "dream", "mother", "robot", "tank"]
- 사람 1 ➡️ 0,3,6,9...
- 사람 2 ➡️ 1,4,7,10...
- 사람 3 ➡️ 2,5,8,11...
위와 같이 몇 번째 사람인지 알 수 있습니다.
- 인덱스 0 / 3 = 0 (첫 번째 라운드)
- 인덱스 1 / 3 = 0 (첫 번째 라운드)
- 인덱스 2 / 3 = 0 (첫 번째 라운드)
- 인덱스 3 / 3 = 1 (두 번째 라운드)
- 인덱스 4 / 3 = 1 (두 번째 라운드)
- 인덱스 5 / 3 = 1 (두 번째 라운드)
- 인덱스 6 / 3 = 2 (세 번째 라운드)
- 인덱스 7 / 3 = 2 (세 번째 라운드)
- 인덱스 8 / 3 = 2 (세 번째 라운드)
위와 같이 각 사람의 차례를 구할 수 있습니다.
마저 풀이를 설명하자면 이미 입력한 단어뿐 아니라 앞사람의 끝말과 자신의 시작말이 다르다면 탈락자가 발생합니다.
따라서 첫 번째는 이전 사람이 없기 때문에 (i > 0)이라는 조건을 넣어주고, charAt() 메서드를 사용하여 전 사람의 마지막 단어 요소와 현재 단어의 첫 번째 요소를 비교하여 같지 않다면 탈락자를 설정해 줍니다.
여기까지 코드를 진행하면 최종 결과는 탈락자를 제외한 단어 리스트가 만들어지게 됩니다.
참고 ❗
[JAVA] ArrayList 알아보기 (동적 배열)
Java에서는 기본적으로 여러 데이터를 다룰 때 배열을 사용합니다. 그러나 배열은 정적이므로, 한 번 생성되면 크기를 변경할 수 없습니다. 배열은 처리할 데이터의 개수가 정해진 경우에 유용
pixx.tistory.com
[JAVA] contains() 메소드 알아보기 (문자열 포함 여부 확인)
contains()❓boolean contains(CharSequence s) 자바의 contains() 함수는 주어진 객체나 값이 특정 컬렉션(예: 리스트, 세트)에 존재하는지를 확인하는 메서드입니다. 주로 문자열이나 컬렉션 내부에
pixx.tistory.com
[JAVA] char에서 String으로 변환하기 (value of() , charAt())
charAt() 란 ❓Java String 클래스에는 charAt()라는 메서드가 있습니다. charAt() 메서드는 문자열의 지정된 인덱스에 있는 문자(char)를 반환합니다. 문자열에서 원하는 문자(char)를 뽑을 때 자주 사용
pixx.tistory.com
'Coding Test > 프로그래머스' 카테고리의 다른 글
| [프로그래머스] LV.1 완주하지 못한 선수 (HashMap, StringBuilder, getOrDefault, Java) (1) | 2024.06.11 |
|---|---|
| [프로그래머스] Lv2. 전화번호 목록 (HashSet, startsWith, Java) (0) | 2024.06.11 |
| [프로그래머스] Lv.1 [1차] 비밀지도 (toBinaryString(), StringBuilder,Java) (0) | 2024.06.09 |
| [프로그래머스] Lv.2 이진 변환 반복하기 (toBinaryString, chars(), stream.count(), Java) (1) | 2024.06.08 |
| [프로그래머스] Lv.1 예산 (greedy, 탐욕, 그리디 알고리즘, Java) (0) | 2024.06.08 |