일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 스프링
- React
- javascript
- 코테
- PCCE
- java
- 프로젝트
- 코딩테스트
- 2025 프로그래머스 코드챌린지 2차 예선
- expo
- node.js
- 프로그래머스
- 오블완
- React Native
- firebase
- Spring
- 리액트네이티브
- 코딩
- 백엔드
- 태그
- map
- 자바
- project
- controller
- 티스토리챌린지
- 리액트 네이티브
- 자바스크립트
- 파이어베이스
- ReactNative
- 리액트
- Today
- Total
양갱의 개발 블로그
[프로그래머스] [2024 KAKAO WINTER INTERNSHIP] 가장 많이 받은 선물(javascript) 본문
https://school.programmers.co.kr/learn/courses/30/lessons/258712?language=javascript
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
확인 내용
1. 선물을 가장 많은 받은 사람, 적게 받은 사람 확인
2. 그리고 선물을 주고 받은 사람의 2차 배열
코드로직
1. 선물을 받을 수 있는 friends의 배열과 2차원 배열 생성
2. 선물 지수 생성 하여 1차원 배열에 선물을 받으면 ++, 선물을 주면 -- 연산
3. 선물을 주거나 받았던 내용을 기록하는 2차원 배열에 준값, 받은 값 기록
4. 2차원 배열에서 두 사람 중 한명이 선물을 받은 횟수보다 준 횟수가 많거나 선물은 받은 횟수와 준 횟수가 같지만 전체 선물 지수가 낮은 사람이라면 다음달에 받아야 하는 값을 ++ 연산
최종코드
function solution(friends, gifts) {
var answer = 0;
// 준사람, 받은 사람 중 몇번 받았는지 확인
let givetake =[];
let giftcount = []
for (var i=0; i<friends.length; i++){
let list =[]
for (var j=0; j<friends.length; j++){
list.push(0)
}
givetake.push(list)
giftcount.push(0)
}
for (var gift of gifts){
// 받은 사람, 준 사람
let giveindex = freindsIndex(gift.split(" ")[0])
let takeindex = freindsIndex(gift.split(" ")[1])
// 선물을 준것과 받은 것을 입력
givetake[giveindex][takeindex] += 1
// 선물 지수 알아보기
giftcount[giveindex]+=1
giftcount[takeindex]-=1
}
console.log("givetake", givetake)
console.log("giftcount", giftcount)
for (var i=0; i<friends.length; i++){
let num = 0;
for (var j=0; j<friends.length; j++){
if (i === j) continue;
if (givetake[i][j] > givetake[j][i] ||
(givetake[i][j] == givetake[j][i] && giftcount[i] > giftcount[j])) {
num++;
}
}
if(answer < num){
answer = num
}
}
// 주거나 받은 사람을 아는 함수
function freindsIndex(who){
for (var i = 0; i < friends.length; i++){
if(friends[i] === who) return i
}
}
return answer;
}
마무리
선물 지수를 파악하는 배열과 2차원 배열로 만드는 것은 어렵지 않았습니다. 함수를 이용해서 쉽게 구할 수 있었지만, 마지막 연산에서 선물을 준 횟수가 많으면 ++ 연산을 한다는 것은 알고 있었습니다.
하지만 이걸로 과연 구할 수 있나?라는 의문이 계속 들어서 더 나은 2차원 배열이 아니라 다른 방법이 있나 싶어서 고민을 더 했습니다. (결국 생각나진 않았지만요ㅎㅎ..)
마지막이 살짝 고민이 많아서 참고를 했었습니다.
매번 코테를 할 때 이렇게 하는게 맞나? 라는 의문으로 계속 고민하게 되는 것 같습니다.. 더 많이 자주 풀어보면 더 나은 알고리즘과 코드로직이 깔끔해질 거라고 생각하겠습니다!
화이팅!