[코테 풀기] 귤 고르기 (JS)

JCH27·2023년 11월 21일
0

coding_test

목록 보기
12/12

Lv.2 첫 번째 문제다.
이제부턴 효율성 까지 고려된 코드를 작성할 필요가 있다.
시간이 된다면 시간복잡도에 대해서도 공부한 뒤 블로그에 정리하도록 하겠다.
언어는 javascript
문제는 [Link] 프로그래머스 에서 풀 수 있다.


문제 : 정수 배열과 정수k가 주어질 때 정수 배열에서 k개의 값을 모았을 때 서로다른 정수의 개수의 최소값을 리턴


해결 - 외부 객체를 생성한 뒤 정렬

	const solution = (k, tangerine) => {
  		const obj = {};
  		// 배열의 값 : 값의 개수 쌍을 담을 객체 생성

  		// 배열을 순회한다.
  		tangerine.forEach((n) => {
    		// obj[n] 값이 있으면 1을 더한 값을
    		// obj[n] 값이 없으면 1을 넣어준다.
    		obj[n] = ++obj[n] || 1;
  		});
  		// 결과 ex) { '1': 1, '2': 2, '3': 2, '4': 1, '5': 2}


  		const nums = Object.values(obj).sort((a, b) => (b-a));
      	// 객체 정적 메서드 Object.values()를 사용해 value(개수)만을 추출하고 내림차순으로 정렬
      	// 가장 큰 수부터 차감해야 한다.
  		// nums = [2, 2, 2, 1, 1]
    	
      	let result = 0;
      	// 결과 변수 선언
      
    	while(k > 0){
        // 타겟넘버를 배열의 큰 값부터 감소시키며 반복한다.
        	k = k - nums[result];
          	// 배열의 값 하나씩 처리하면 한가지 크기의 귤이 담긴다.
        	result = result+1;
          	// 귤의 종류 수를 증가시킨다.
    	}
      
		return result;
		// 결과 리턴
	}

for, while 등 반복문 사용을 최소화 하며 코드를 작성할 필요가 있다.

profile
포기하지 않는 키보드 워리어

0개의 댓글