[문제 링크]
https://school.programmers.co.kr/learn/courses/30/lessons/42840
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[문제 사고]
주어진 배열과 주어진 조건의 순열을 완전 탐색을 통해 비교하면서 일치하는 값을 필터링하여 일치하는 값이 높은 순열에 해당하는 숫자를 도출해낸다.
[문제 해결]
1. 각 수포자가 찍는 방식에서 반복되는 부분을 찾아 배열로 선언을 한다.
2. 정답으로 주어진 배열과 찍는 방식이 담긴 배열을 완전 탐색을 통해 filter method를 사용해 일치하는 요소의 개수를 각각 선언한다.
3. 일치하는 요소 개수들 중 최대값을 골라낸다.
4. 최대값이 일치하는 요소 개수와 같은 변수는 결과값이 담길 빈 배열에 수포자의 번호를 push 해준다.
5. 결과값이 담긴 배열을 return한다.
[작성 코드]
function solution(answers) {
const one = [1,2,3,4,5];
const two = [2,1,2,3,2,4,2,5];
const three = [3,3,1,1,2,2,4,4,5,5];
const correctOne = answers.filter((e,i) => e === one[i % one.length]).length;
const correctTwo = answers.filter((e,i) => e === two[i % two.length]).length;
const correctThree = answers.filter((e,i) => e === three[i % three.length]).length;
const max = Math.max(correctOne,correctTwo,correctThree);
const result = [];
if(max === correctOne) result.push(1);
if(max === correctTwo) result.push(2);
if(max === correctThree) result.push(3);
return result;
}
[문제 회고]
주어진 정답 배열을 갖고 수포자의 찍는 방식이 표현된 순열을 완전 탐색하며 일치하는 값을 찾아내야겠다고 우선적으로 생각이 들기는 했다. 처음에는 수포자의 찍는 방식의 패턴을 찾아내어 빈 배열에 반복문을 통해 주어진 정답 배열의 길이만큼 반복하여 넣으려고 했지만 그럴 필요가 없이 반복되는 부분만 배열을 넣어두고 인덱스 값의 나머지를 통해 순회를 하면 된다는 점을 찾아냈다. 또한 코드의 효율성이 좋지 않아보이고 불필요한 변수 선언이 많아 보이는 경향이 있었지만 런타임 결과는 그닥 나쁘지 않았다. 하지만 변수 선언을 줄여서 메모리를 최적화 할 수 있는 방법이 있는지 생각해 볼 계획이다.
'Coding Test > 항해99 - 코테 스터디 2기' 카테고리의 다른 글
99클럽 코테 스터디 11일차 TIL(5월 31일) + 알고리즘 DFS,BFS (0) | 2024.06.01 |
---|---|
99클럽 코테 스터디 10일차 TIL(5월 30일) + 알고리즘 DFS (0) | 2024.05.30 |
99클럽 코테 스터디 8일차 TIL(5월 28일) + 알고리즘 완전 탐색 (0) | 2024.05.28 |
99클럽 코테 스터디 7일차 TIL(5월 27일) + 알고리즘 정렬 (0) | 2024.05.27 |
99클럽 코테 스터디 6일차 TIL(5월 26일) + 알고리즘 정렬 (0) | 2024.05.26 |