[프로그래머스] 귤 고르기 Lv2

2025. 1. 7. 20:20코딩 테스트 준비

728x90
반응형

 

https://school.programmers.co.kr/learn/courses/30/lessons/138476

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

귤 고르기 문제로 아래는 내 풀이인데 44점을 맞고 틀렸다. 다시 시작하는 새 마음 새 뜻 치고 그렇게 좋지는 않은 결과이다.

 

그런데 어떡하겠나? 내가 못한건데. 인정할건 인정하고 그냥 넘어가자. 참고로 20분 안에 문제를 마무리 하지 못하면 틀린 걸로 취급하고 그냥 풀이 찾고 공부하기로 했다. 아무래도 일하면서 공부하려면 나도 최소한으로 하고 싶다는 마음때문일까? 이렇게 하지 않으면 유지가 불가능하다는 결론에 도달했다. 

 

아무튼 아래는 내가 틀린 코드이다.

 

function solution(k, tangerine) {
    var answer = 0;
    let kind = tangerine.map((_) => {return 0})
    tangerine.forEach((tanger) => {
        if(kind[tanger] > 0) kind[tanger] += 1;
        else kind[tanger] = 1;
    })
    
    kind.sort((a, b) => {return b - a});
    kind.forEach((tanger, index) => {
        k = k - tanger;
        if(index === 0 && k <= 0) {
            answer = 1;
            return;
        }
        if(k >= 0) {
            answer += 1;
        } else {
            return;
        }
    })
    
    return answer;
}

 

다시 보면 뭔가 파이썬스러운 코드같다. 아주 순수하게 개수를 카운팅하고 큰 수가 앞에 오게 정렬 후 K가 다 빠질때까지 반복문을 돌렸는데 시간 박살. 점수 박살이다. 그럼 정답을 찾아보자.

 

function solution(k, tangerine) {
  let answer = 0;
  const tDict = {};

  // 중복 값 개수 count
  tangerine.forEach((t) => (tDict[t] = (tDict[t] || 0) + 1));

  // value(중복 값 개수)를 내림차순으로 정렬
  const tArr = Object.values(tDict).sort((a, b) => b - a);

  // 필요한 귤만큼 가짓수를 더해줍니다
  for (const t of tArr) {
    answer++;
    if (k > t) k -= t;
    else break;
  }

  return answer;
}

 

위 내용을 보니 접근이 틀리지는 않았다. 다만 내가 카운팅하는 방식이 개박살났던 것으로 보인다. 위의 코드가 더 효율적이었으나, 만약 내가 고집으로 문제를 풀었으면 아래처럼 나왔을 거 같다. 정신 차리자.

 

function solution(k, tangerine) {
    var answer = 0;
    let kind = tangerine.map((_) => {return 0})
    tangerine.forEach((tanger) => {
        if(kind[tanger] > 0) kind[tanger] += 1;
        else kind[tanger] = 1;
    })
    
    kind.sort((a, b) => {return b - a});
   
    for(const tanger of kind) {
        answer += 1;
        if(k > tanger) {
            k -= tanger;
        } else break;
    }
    
    return answer;
}

 

 

정답 참고 블로그

 

https://velog.io/@lovelys0731/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-138476.%EA%B7%A4-%EA%B3%A0%EB%A5%B4%EA%B8%B0-javascript

 

[프로그래머스] 138476.귤 고르기 | javascript

경화는 과수원에서 귤을 수확했습니다. 경화는 수확한 귤 중 'k'개를 골라 상자 하나에 담아 판매하려고 합니다. 그런데 수확한 귤의 크기가 일정하지 않아 보기에 좋지 않다고 생각한 경화는 귤

velog.io

 

728x90
반응형