🔺 문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
🔺 코드
- 틀림
import java.util.*;
class Solution {
public int[] solution(int n, String[] words) {
int[] answer = new int[2];
Map<String, Integer> map = new HashMap<>();
map.put(words[0], 1);
for(int i = 1 ; i < words.length - 1 ; i++) {
if(map.containsKey(words[i]) || words[i-1].charAt(words[i-1].length() - 1) != words[i+1].charAt(0)) {
answer[0] = (i % n) + 1; // 사람 (8 % 3 + 1)
answer[1] = (i / n) + 1; // 차례 (8 / 3 + 1)
break;
}
map.put(words[i], 1);
}
return answer;
}
}
HashMap을 써볼까 생각했었다... 로직이 틀린 거겠지,,,
- 정답 1) List 활용
import java.util.*;
class Solution {
public int[] solution(int n, String[] words) {
int[] answer = new int[2];
List<String> list = new ArrayList<>();
for(int i = 0 ; i < words.length ; i++) {
if(list.contains(words[i])) {
answer[0] = i % n + 1; // 사람
answer[1] = i / n + 1; // 차례
break;
}
list.add(words[i]);
if(i > 0 && words[i-1].charAt(words[i-1].length() - 1) != words[i].charAt(0)) {
answer[0] = (i % n) + 1; // 사람
answer[1] = (i / n) + 1; // 차례
break;
}
}
return answer;
}
}
✅ 해결 아이디어
- 리스트 활용.
- for문 안에서 조건문
└ 첫 번째 if문 : 중복되는 단어인 경우
└ 두 번째 if문 : (이전 단어의 마지막 글자 ≠ 현재 단어의 첫 번째 글자)인 경우

- 정답 2) Set 활용
import java.util.*;
class Solution {
public int[] solution(int n, String[] words) {
int[] answer = new int[2]; // 사람, 차례
Set<String> set = new HashSet<>();
set.add(words[0]);
for(int i = 1 ; i < words.length ; i++) {
if(!set.contains(words[i]) && words[i-1].charAt(words[i-1].length() -1) == words[i].charAt(0)) {
set.add(words[i]);
} else {
answer[0] = (i % n) + 1; // 사람
answer[1] = (i / n) + 1; // 차례
break;
}
}
return answer;
}
}
🔺 다른 풀이들
- 풀이1) HashSet 사용
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
import java.util.HashSet;
class Solution {
public int[] solution(int n, String[] words) {
int[] answer = new int[2];
HashSet<String> set = new HashSet<String>();
set.add(words[0]);
String prev = "";
for(int i = 1; i < words.length; i ++){
prev = words[i - 1];
if(set.contains(words[i]) || prev.charAt(prev.length() - 1) != words[i].charAt(0)){
answer[0] = i % n + 1; // 사람
answer[1] = i / n + 1; // 차례
break;
}
set.add(words[i]);
}
return answer;
}
}
HashSet을 이용하셨다. (HashSet - 중복 제거)
words[0]은 미리 set에 넣어놓고, 1부터 시작하게 하셨다.
중복 체크할 때는 contains()
이용하심.
이게 제일 깔끔한 풀이 같다.
-풀이2) boolean 사용 (+ 리스트)
프로그래머스[Java] - (Level2)영어 끝말잇기
https://programmers.co.kr/learn/courses/30/lessons/12981 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업
zzang9ha.tistory.com
여기도 중복 체크할 때 contains()
를 사용하셨다.
중복인 경우, boolean flag를 false로 값 변경하는 식으로 하셨다.
- 풀이3) HashMap 사용
[프로그래머스] 영어 끝말잇기 - Java
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", "enc
hyojun.tistory.com
내가 사용하려고 생각했던 HashMap을 사용하셨다!
덕분에 내 로직이 오디서 잘못되었음을 확인하였음,,!!
(참고)
- 풀이
[프로그래머스] 영어 끝말잇기 (JAVA)
문제 출처 - Programmers 문제는 여기 코딩테스트 연습 - 영어 끝말잇기 3 ["tank", "kick", "know", "wheel", "land", "dream", "mother", "robot", "tank"] [3,3] 5 ["hello", "observe", "effect", "take", "either", "recognize", "encourage", "en
blackvill.tistory.com
- HashSet 사용법 (add, remove, size, contains)
[JAVA] HashSet이란? & 사용법 정리
안녕하세요 최근 알고리즘을 공부하면서 자바의 다양한 클래스를 알게되고 있는데요 그 동안 개발을 하면서 많이 알고 있다고 생각했는데 끊임없이 나오네요 ㅠ HashSet 클래스에 대해서 설명해
crazykim2.tistory.com
+ 중복제거
중복체크및 제거(String, HashMap, HashSet, Stream)
velog.io
'코테 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Lv. 2] 행렬의 곱셈 (0) | 2023.04.03 |
---|---|
[프로그래머스/Lv. 2] 카펫 (0) | 2023.04.02 |
[프로그래머스/Lv. 2] 짝지어 제거하기 (0) | 2023.04.02 |
[프로그래머스/Lv. 2] 이진 변환 반복하기 (0) | 2023.04.02 |
[프로그래머스/Lv. 2] 다음 큰 숫자 (0) | 2023.04.02 |