https://school.programmers.co.kr/learn/courses/30/lessons/42840
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...
let p1 = [1, 2, 3, 4, 5];
let p2 = [2, 1, 2, 3, 2, 4, 2, 5];
let p3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];
이 반복되는 것을 볼 수 있다
문제의 수가 찍는 방식패턴 하나보다 더 많을 수 있기 때문에
나중에 이걸 어찌 반복시키는지는 후에 알아보기로 함
for문으로 반복시키는 것보다 더 간단한 방법이 있을 것이다
let s1 = 0, s2 = 0, s3 = 0;로 각 문제를 맞춘 정답의 변수를 0으로 초기화해놓고
문제의 수만큼 각각 반복시켜서 ++ 하는 식으로 처리하고
그걸 배열에 담은 담에 제일 높은 숫자의 length를 리턴하는 식으로 하면 될 듯
단, 정답의 숫자가 같을 경우엔 공동 1위로 인정하여 모두다 리턴
막혔던 부분 1
문제의 수가 더 많을 경우를 대비하여 p1, p2, p3 가 반복되도록 해야하는데 반복문보다는 더 간단하게 연산자로 가능하다는 것을 GPT를 써서 알아냄 ㅜㅜ
if (answers[i] === p1[i])의 단순 비교가 아니라
if (answers[i] === p1[i % p1.length])로 쉽게 가능
막혔던 부분 2
어떻게 최고 고득점자를 필터링 할수 있을 것인지(그리고 공동 1위는 어떻게 뽑아낼 것인지)
어떻게 풀지 생각은 됐지만 표현이 어려운 부분이었는데
Math.max함수와 단순 for문으로 해결
let s = [s1, s2, s3];
let maxScore = Math.max(...s);
let s = [s1, s2, s3]는 나름 구조 분해 할당인 줄 알았던 그냥 단순 배열 리터럴
아래는 찐 구조 분해 할당의 예시
let scores = [100, 200, 300];
let [score1, score2, score3] = scores;
그리고 위의 배열 리터럴을 선언할 때 for 문이 돌기전으로 하면 값을 못 받아오는 상황이 있었음
이건 자료구조와 메모리 관련 공부를 좀 더 보강해야 함
최고득점자 공동순위 뽑아내기
for (let i = 0; i < s.length; i++) {
if (s[i] === maxScore) {
result.push(i + 1);
}
}
최종 정답
function solution(answers) {
let p1 = [1, 2, 3, 4, 5];
let p2 = [2, 1, 2, 3, 2, 4, 2, 5];
let p3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];
let s1 = 0, s2 = 0, s3 = 0;
for (let i = 0; i < answers.length; i++) {
if (answers[i] === p1[i % p1.length]) {
s1++;
}
if (answers[i] === p2[i % p2.length]) {
s2++;
}
if (answers[i] === p3[i % p3.length]) {
s3++;
}
}
let scores = [s1, s2, s3];
let maxScore = Math.max(...scores);
let result = [];
for (let i = 0; i < scores.length; i++) {
if (scores[i] === maxScore) {
result.push(i + 1); // 순번은 1부터 시작하므로 i+1을 push
}
}
return result;
}
'algorithm > 문제풀이' 카테고리의 다른 글
연습문제 > 소수 찾기 (0) | 2024.03.31 |
---|---|
연습문제 > 기사단원의 무기 (0) | 2024.03.29 |
깊이/너비 우선 탐색(DFS/BFS) > 게임 맵 최단거리 (0) | 2024.03.08 |
스택/큐 > 주식가격 (0) | 2024.02.28 |
스택/큐 > 프로세스 (0) | 2024.02.22 |