면접에서 자주 출제될 것 같은..? 코딩 테스트 문제 풀이🥕

2024. 12. 25. 14:12·JavaScript
🔑단 한사람이라도 내가 작성한 글을 봐준다면, 글을 작성할 이유는 충분하다

💡 프로그래머스 최빈값 구하기


📃 최근에 프로그래머스 코딩 테스트 기초문제들을 모두 끝내고 입문 문제로 왔는데, 레벨이 0인데 생각보다 난이도가 있지 않은가 생각이 드네요. 저의 실력 문제겠죠?ㅎㅎ

➡️문제는 다음과 같습니다. 최빈값을 구하는 문제인데, 몇일전에 당근에서 라이브코딩때 진행했던 문제와 유사한 부분이 있어서 한번 다뤄볼려합니다.

💡 문제 풀이


📃 다양한 접근 방법이 있을 것 같은데, 일단은 reduce를 통해서 각각 숫자를 객체값으로 저장을 해주면 좋을 것 같아요

➡️일단 reduce함수는 실무에서도 자주 사용되는 것으로 알고 있는데, 누산기 accumulator라는 누산기를 사용합니다. reduce함수는 주어진 배열을 순회하며, "누산기"를 통해 값을 누적합니다

💻CODE

function sumArray(array){
	return array.reduce((acc, num) => acc + num, 0)
}

console.log(sumArray([1,2,3,4,5])); // 15

⬆️ 일단 reduce 는 첫번째 인수로 callback 함수를 받습니다,  우리는 익명함수로 (acc, num) => acc + num 정의해주었고, acc에 값이 누적됩니다. 그 다음으로 오는 인수 0은 초기값을 의미합니다. 다음을 통해 reduce함수는 array를 순회하고 결과적으로 15라는 값을 반환합니다

💻CODE

function solution(array) {
    const frequency = array.reduce((acc, num) => {
    	acc[num] = (acc[num] || 0) + 1;
      	return acc;
    }, {})
}

⬆️우리는 초기값으로 빈객체를 설정해주었고, reduce 함수는 초기값으로 num = 1을 가지고 옵니다. acc[1] = (acc[num] || 0) 에서 acc[num] 값은 undefined로 0이 반환되고, 0 + 1이 되기 때문에, acc[1] = 1 ,고로 { 1: 1 } 이 됩니다

💻CODE

function solution(array) {
    const frequency = array.reduce((acc, num) => {
    	acc[num] = (acc[num] || 0) + 1;
      	return acc;
    }, {})
    
    const maxFrequency = Math.max(...Object.value(frequency)); // 구조분해할당 //
}

⬆️ 우리는 객체 안에서 어떤 값이 가장 많은 빈도수를 가지고 있는지, Math.max를 통해서 찾아야합니다. 근데 frequency는 객체값이죠? 구조분해할당을 통해 value값만 뽑아줍니다. 

💻CODE

function solution(array) {
    ...
    
    const answer = Object.entries(frequency)
    	.filter([key, value] => value === maxFrequency)
        .map(([key]) => Number(key));
}

⬆️우리는 객체로 저장되어 있는 데이터를 Object.entries() 함수를 사용하여 배열로 변환합니다.

이 배열은 [key, value] 형태로 각 항목을 다룹니다.

그 이후에는 각 [key, value] 쌍을 순회하면서 value 값을 사전에 정의한 maxFrequency와 비교하여, 해당하는 값만 필터링합니다.

이렇게 필터링된 값들 중에서 key만 필요하기 때문에, map()을 사용하여 각 요소에서 key를 추출합니다.

 

💻CODE

function solution(array) {
    ...
    return answer.length > 1 ? -1 : answer[0]
}

 

⬆️ 마지막으로 삼항 연산자를 통해 배열의 길이가 1보다 크면 최빈값이 중복된다는 뜻이니깐 -1을 아니면 배열의 첫번째 요소를 반환합니다

📝 SUMMARY


 📌 저는 당근 라이브 면접때는 자바를 선택해서 문제에 접근했었는데, 왜 못풀었을까요.. 지금 생각해보면 더 쉬웠을 것 같은데,,, 아쉽네요. 이번 포스팅에서 가장 중요한 부분은 reduce, 구조분해할당, 삼항 연산자를 적절하게 활용해서 문제를 접근해봤다는 것이 큰 배움이였던 것 같습니다. 제가 실무경험이 없지만, 빈도수를 찾는 함수를 구현하는 것은 실무에서도 다양한 곳에서 많이 사용되지 않을까합니다

 

저작자표시 비영리 변경금지 (새창열림)
'JavaScript' 카테고리의 다른 글
  • Axios 라이브러리 쉽게 이해하기 GET, POST, Interceptors
  • [Javascript] 코딩 입문 트레이닝 String.fromCharCode, sort(), Math.floor()
  • [Javascript] 콜백 함수 Callback function
  • ES6+ 자바스크립트 중요 개념 정리 🔑 - 이벤트(event)
Jelong
Jelong
커스텀 웹: https://jaehong-park.com Github: https://github.com/qkrwoghd04
  • Jelong
    24/7 Developer's Note
    Jelong
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Software Engineering
      • Ubuntu
      • Network
      • JavaScript
      • Web
      • Interaction Design
      • React Native
      • React
      • Algorithm
      • Java
      • Database design
      • IT Trend
      • TroubleShooting
      • AWS
      • Interview
      • LG CNS AM CAMP 1기
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    오블완
    generic
    ChatGPT
    BST
    알고리즘 분석
    미니넷
    알고리즘
    화이트 박스 테스트
    prototyping
    소프트웨어 공학
    데이터 구조
    mininet
    html
    React
    css
    GPT-4
    heap
    AWS
    자바스크립트
    블랙 박스 테스트
    티스토리챌린지
    java
    이진트리
    frontend
    expo
    JS
    javascript
    자바
    Queues
    typescript
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
Jelong
면접에서 자주 출제될 것 같은..? 코딩 테스트 문제 풀이🥕
상단으로

티스토리툴바