[프로그래머스] 영어 끝말잇기
2023. 1. 31. 16:32ㆍ기록/Programmers
- 목차
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/12981
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
나의 문제 풀이
function solution(n, words) {
let answer = [0, 0];
for (let i = 1; i < words.length; i++) {
if (
words[i - 1][words[i - 1].length - 1] !== words[i][0] ||
words.slice(0, i).includes(words[i])
) {
answer = [(i % n) + 1, Math.ceil((i + 1) / n)];
break;
}
}
return answer;
}
- 정답 배열에 미리 [0, 0]을 할당해 놓음
- 1부터 words 배열의 길이보다 작을 때까지 반복함
- words 배열에서의 이전 요소의 마지막 글자가 현재 요소의 첫번째 글자와 동일하지 않거나 (이어지지 않는 단어)
- words 배열의 이전 요소들 중에서 현재 요소가 포함되어 있을 경우 (중복 단어)
- 정답 변수에 [번호, 차례] 를 할당하고 빠져나감
- 번호: (i % n) + 1
- 차례: Math.ceil((i + 1) / n)
- 예) 단어 배열 : ["tank", "kick", "know", "wheel", "land", "dream", "mother", "robot", "tank"]
- 사람 수: 3명
- 걸린 사람: "tank" 를 중복으로 말한 사람
- 걸린 사람의 번호: (8 % 3) + 1 === 3번째 사람
- 걸린 사람의 차례: 올림((8 + 1) / 3) === (9 / 3) === 3
- 정답: [3, 3]
다른 사람의 문제 풀이
function solution(n, words) {
let answer = 0;
words.reduce((prev, now, idx) => {
answer = answer || ((words.slice(0, idx).indexOf(now) !== -1 || prev !== now[0]) ? idx : answer);
return now[now.length-1];
}, "")
return answer ? [answer%n+1, Math.floor(answer/n)+1] : [0,0];
}