프라이D
프라이Develog(❁´◡`❁)
프라이D
전체 방문자
오늘
어제
  • ALL (378)
    • TDD, Cleancode with JavaScr.. (5)
    • 프로젝트 (32)
      • work (3)
      • 직접 만드는 기술 블로그 (2)
      • 데일리 옥션 (19)
      • 모락모락 (8)
    • Computer Science (1)
    • Algorithm & 자료구조 (94)
      • 알고리즘 w.JavaScript (53)
      • 자료구조 (5)
      • (인프런) 자바스크립트 알고리즘 문제풀이 (34)
    • JavaScript (45)
      • JavaScript (41)
      • 모던 자바스크립트 Deep Dive (4)
    • WEB (13)
    • 회고 (12)
    • TIL (109)
    • WIL (7)
    • Stacks (20)
      • React.js (6)
      • Next.js (1)
      • Redux (3)
      • Node.js (2)
      • GIT (2)
      • SAP (1)
    • 15일 메이킹 프로젝트 (15)
    • 이전 기록 (14)
    • ETC. (5)
    • ---------------2021 (6)
      • 내일배움단-웹개발 5주 (2)
      • 정보처리기사 (4)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • 자바스크립트비트마스크
  • Til
  • 국비지원
  • MySQL
  • 자바스크립트
  • 내일배움단
  • 모던자바스크립트딥다이브
  • 자바스크립트알고리즘
  • JavaScript
  • 투포인터알고리즘
  • nomadcoder
  • 내일배움카드
  • 코딩프로젝트
  • 2023 인프콘 후기
  • nomadcoders
  • 스파르타코딩클럽
  • 코드스테이츠
  • 알고리즘
  • vanilaJS
  • 비트마스크

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
프라이D

프라이Develog(❁´◡`❁)

Algorithm & 자료구조/(인프런) 자바스크립트 알고리즘 문제풀이

[알고리즘]k번째 큰 수

2022. 2. 6. 22:01

문제

현수는 1부터 100사이의 자연수가 적힌 N장의 카드를 가지고 있습니다. 같은 숫자의 카드가 여러장 있을 수 있습니다. 현수는 이 중 3장을 뽑아 각 카드에 적힌 수를 합한 값을 기록하려고 합니다. 3장을 뽑을 수 있는 모든 경우를 기록합니다. 기록한 값 중 K번째로 큰 수를 출력하는 프로그램을 작성하세요.
만약 큰 수부터 만들어진 수가 25 25 23 23 22 20 19......이고 K값이 3이라면 K번째 큰 값은 22입니다.

풀이

function solution(n, k, card) {
    let answer;
    let set = new Set();
    for (let i = 0; i < n - 2; i++) {
      for (let j = i + 1; j < n - 1; j++) {
        for (let s = j + 1; s < n; s++) {
          set.add(card[i] + card[j] + card[s]);
        }
      }
    }
    answer = [...set].sort((a, b) => b - a);

    return answer[k - 1];
  }

  let arr = [13, 15, 34, 23, 45, 65, 33, 11, 26, 42];
  console.log(solution(10, 3, arr));
  • 3가지 숫자를 뽑기 위해 3중 for문을 사용했다. 처음에 j=1, s=2 로 정의했더니 맞지 않는 경우가 있었다. 강의를 보고 배열의 i번째의 바로 다음 숫자를 지목하기 위해 i+1, j+1로 수정했다. 
  • set으로 중복을 제거했다. 처음에 그냥 answer에 바로 push했더니 범위보다 훨씬 큰 숫자가 나왔다. 조건을 보면 순서가 25,25,23,23,22 처럼 중복이 되면 k가 3일때 k번째 큰 수는 23이 아닌 22가 되어야 한다고 나와있다. 
  • set을 answer에 배열로 넘겨 sort 내림차순으로 정렬했다. 배열로 넘겨줄 때 Array.from(set) 을 사용하지 않고 전개 연산자로 [...set] 이렇게 넘겨주었는데 결과값은 똑같았다.
  • 배열이 0부터 시작하기 때문에 answer[k-1]을 return 했다. 또 결과가 다르길래 왜 그런가 했는데 배열이 0부터 시작하는걸 망각해서 그랬다.
저작자표시 (새창열림)

'Algorithm & 자료구조 > (인프런) 자바스크립트 알고리즘 문제풀이' 카테고리의 다른 글

[알고리즘]연속 부분 수열 1 - 투포인터 알고리즘  (0) 2022.02.13
[알고리즘] 공통원소 구하기 - 투포인터 알고리즘  (0) 2022.02.08
[알고리즘]졸업선물 - sort 정렬, 완전탐색  (0) 2022.02.06
[알고리즘]멘토링 - 완전탐색  (0) 2022.02.03
[알고리즘]뒤집은 소수(소수 판별하기)  (0) 2022.02.02
    'Algorithm & 자료구조/(인프런) 자바스크립트 알고리즘 문제풀이' 카테고리의 다른 글
    • [알고리즘]연속 부분 수열 1 - 투포인터 알고리즘
    • [알고리즘] 공통원소 구하기 - 투포인터 알고리즘
    • [알고리즘]졸업선물 - sort 정렬, 완전탐색
    • [알고리즘]멘토링 - 완전탐색
    프라이D
    프라이D
    틀린내용 정정 및 개선사항은 언제든지 댓글 달아주세요 :D

    티스토리툴바