문제 🔽
https://school.programmers.co.kr/learn/courses/30/lessons/12981
다른사람 풀이 🔽
function solution(n, words) {
var fail_i = -1;
for(var i = 1; i < words.length; i++){
var val = words[i];
// 전단계의 끝말과 현단계 첫말이 다를 경우
if(words[i-1].substring(words[i-1].length-1) != val.substring(0, 1)) {
fail_i = i;
break;
}
// indexOf 함수는 첫번째로 값이 맞는 인덱스만 반환하므로
// 현재 인덱스와 맞지 않을 경우 중복된 값
if(words.indexOf(val) != i) {
fail_i = i;
break;
}
}
if(fail_i == -1) return [0,0];
var no = fail_i%n + 1;
var turn = Math.floor(fail_i/n) + 1;
return [no, turn];
}
내풀이🔽
function solution(n, words) {
// n명이 m개의 단어를 끊말잇기 진행
let stack = []
let stopPoint =0;
for(let i=0; i<words.length; i++){
if(words[i-1]){
if(stack.includes(words[i])||words[i-1].charAt(words[i-1].length-1)!==words [i].charAt(0)){
stopPoint = i+1;
break;
}else{
stack.push(words[i])
}
}else{
stack.push(words[i]);
}
}
if(stopPoint){
if(stopPoint%n===0){
return [n,parseInt(stopPoint/n)]
}else{
return [stopPoint%n,parseInt(stopPoint/n)+1]
}
}else{
return [0,0]
}
}
느낀점🔽
처음 코드를 작성했을때 테스트 검사에서 실패하는 경우가 존재했었고 무엇때문인지 한 참 고민하다 논리에 있어 오류 부분을 발견했다. 바로 %연산에서 나머지가 0일 경우에는 n번째 사람이 틀렸다는 것인데 실제 값 0과 n은 다르다. 그리고 또한 라운드를 계산할 때 분기 처리하여 연산을 진행해야 한다. 예를들어 3명이서 끊말잇기 중 8번째에서 실패했을때 9번째 실패했을경우 전자는 8/3+1 =>3번째 라운로 연산하면 되고 후자의 경우 9/3 =3 => 추가로 +1을 하지 않아도 실패한 라운드를 알 수 있다.
로직을 구성하면서 charAt 메서드를 처음 써봤다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/charAt
'Javascript' 카테고리의 다른 글
프로그래머스 코딩테스트 풀이(js) > 예상 대진표(lv2) (0) | 2023.06.23 |
---|---|
프로그래머스 코딩테스트 풀이(js) > 카펫 (lv2) (0) | 2023.06.20 |
프로그래머스 코딩테스트 풀이(js) > 짝지어 제거하기(lv2) (0) | 2023.06.18 |
프로그래머스 코딩테스트 풀이(js) > 피보나치 수(lv2) (0) | 2023.06.17 |
프로그래머스 코딩테스트 풀이(js) > 다음 큰 숫자(lv2) (0) | 2023.06.16 |