알고리즘(Algorithm)

프로그래머스 - 모의고사 [JS]

Hun-bot 2022. 12. 30. 22:03
728x90
반응형

핵심

제출 시 5번 이후로 거의 다 실패가 나온다면 그건 answers의 길이와 각 수포자가 찍는 방식의 대한 길이를 고려하지 X

단순하게 아래처럼 코드를 만들었다고 가정해보자

  answers.forEach((i,idx)=>{
    if(i===ex1[idx]){
      ans.push(1)
    }
    if(i===ex2[idx]){
      ans.push(2)
    }
    if(i===ex3[idx]){
      ans.push(3)
    }
  })

만약 answers가 [1,2,3,4,5,2,2,2,3,4,2,5,1,2,5,5,3] 이런식으로 되어있다면 idx값은 계속해서 증가한다.

그래서 ex1[10] ← undefined 라는 결과가 나오기에 인덱스 자체를 각 수포자가 찍는 방식의 길이로 나눠서 해결하면 되는 문제였다.

  answers.forEach((i,idx)=>{
    if(i===ex1[idx%ex1.length]) ans[0]+=1
    if(i===ex2[idx%ex2.length]) ans[1]+=1
    if(i===ex3[idx%ex3.length]) ans[2]+=1
  })
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, ...
function solution(answers) {
  const ex1=[1,2,3,4,5]
  const ex2=[2,1,2,3,2,4,2,5]
  const ex3=[3,3,1,1,2,2,4,4,5,5]
  let ans=[0,0,0]
  let res=[]
  answers.forEach((i,idx)=>{
    if(i===ex1[idx%ex1.length]) ans[0]+=1
    if(i===ex2[idx%ex2.length]) ans[1]+=1
    if(i===ex3[idx%ex3.length]) ans[2]+=1
  })
  
  for (let i = 0; i < ans.length; i++) {
    if(Math.max(...ans)===ans[i]){
      res.push(i+1)
    }
  }
  return res
}

solution([1,2,3,4,5])

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, ...

728x90
반응형