
🧫 문제 분석
✔️ 출처
📖 문제

핵심
말 그대로 끝말잇기이며 앞 뒤 문자가 이어지는 지 확인
중복 단어 불가
🔅 문제 풀이
import java.util.*;
class Solution {
// 1번 부터 순서대로 한사람씩 단어
// 마지막 다음 1번부터 다시시작
// 마지막 문자로 시작하는 단어
// 중복 단어 불가
// 한 글자 불가
public int[] solution(int n, String[] words) {
Map<String, Boolean> map = new HashMap<>();
char lastWord = words[0].charAt(0);
for (int i = 0; i < words.length; i++) {
if(map.getOrDefault(words[i], false))
return new int[]{(i % n) + 1 , (int)Math.ceil((float)(i + 1) / n)};
else if (lastWord != words[i].charAt(0))
return new int[]{(i % n) + 1 , (int)Math.ceil((float)(i + 1) / n)};
map.put(words[i], true);
lastWord = words[i].charAt(words[i].length() - 1);
}
return new int[]{0,0};
}
}

다른사람풀이를 보며
난 왜 Math.round Ceil을 써서 효율성을 구리게 하였을까..
import java.util.*;
class Solution {
// 1번 부터 순서대로 한사람씩 단어
// 마지막 다음 1번부터 다시시작
// 마지막 문자로 시작하는 단어
// 중복 단어 불가
// 한 글자 불가
public int[] solution(int n, String[] words) {
Map<String, Boolean> map = new HashMap<>();
char lastWord = words[0].charAt(0);
for (int i = 0; i < words.length; i++) {
if(map.getOrDefault(words[i], false))
return new int[]{(i % n) + 1, (i / n) + 1};
else if (lastWord != words[i].charAt(0))
return new int[]{(i % n) + 1 , (i / n) + 1};
map.put(words[i], true);
lastWord = words[i].charAt(words[i].length() - 1);
}
return new int[]{0,0};
}
}

❗ 오답노트 / 필요한 지식
- 처음에 Math.round를 사용했는데 생각해보니 반올림이 아닌 올림을 해줘야하는 것이였다. ceil()메서드를 기억하자.
- 올림, 반올림같은 메서드는 실수형을 매개변수에 넣어야한다. 사용시 캐스팅해주자.
- 중복체크에 적합한 Set이 있다.
- 굳이 반올림, 올림 안해도 충분한데 이걸 생각못했다. 잘 기억해두고 써먹자.
'programmers > Lv 2' 카테고리의 다른 글
행렬의 곱셈 (0) | 2024.06.27 |
---|---|
n^2 배열 자르기 (0) | 2024.06.27 |
H-Index (0) | 2024.06.27 |
카펫 (0) | 2024.06.27 |
JadenCase 문자열 만들기 (0) | 2024.06.27 |