[프로그래머스 자바스크립트] ‘구명보트’ 풀어보기

2024. 8. 7. 16:49·Algorithm/Programmers(JavaScript)

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42885


1. 나의 풀이

function solution(people, limit) {
    var sortedPeople = people.sort((a,b) => a-b);
    let cnt = 0;
    
    var i = 0;
    var j = sortedPeople.length - 1;
    
    while(i <= j) {
        if(sortedPeople[i] + sortedPeople[j] <= limit) {
            i++;
            j--;
        }
        else {
            j--;
        }
        cnt++;
    }
    
    return cnt;
    
    
}
  1. people 배열을 정렬한, sortedPeople 배열을 생성한다.
  2. 포인터 두 개를 생성한다. (i는 0, j는 sortedPeople의 맨 끝에)
  3. i가 j보다 작거나 같을 동안 계속 순회를 하면서
    1. 배열에서 가장 큰 값과 작은 값을 더한 값이 limit보다 작거나 같으면 i를 오른쪽으로 한 칸, j를 왼쪽으로 한 칸 옮긴다. → 가장 많은 몸무게를 가진 사람과 가장 적은 몸무게를 가진 사람을 같이 태운다는 뜻
    2. 만약 limit보다 크다면 j를 왼쪽으로 한 칸 옮긴다. → 가장 많은 몸무게를 가진 사람을 단독으로 태운다는 뜻
    3. 그리고 태울때마다 cnt를 1씩 더해준다.
  4. 더해진 cnt를 return한다.

순수하게 내 실력으로는 풀지 못하고 인터넷의 도움을 받았다. 이번 기회를 통해 투 포인터가 많이 유용하다는 것을 알게 되었다.


2. 다른 사람의 풀이

function solution(people, limit) {
  let biggest = 0,
    count = 0,
    i = 0;
  people.sort((a, b) => a - b);
  while (people.length > 0) {
    biggest = people.pop();
    i = 0;
    while (people[i] <= limit - biggest) i++;
    if (i) people.splice(i - 1, 1);
    count++;
  }
  return count;
}

  1. people 배열을 정렬한다.
  2. people 배열이 0이 될 때까지 무한루프를 돌리는데
    1. people[i]가 limit - biggest보다 작거나 같다면(같이 배에 탈 수 있다면) i를 1 더해준다.(무한루프)
    2. 루프에서 벗어나면 그리고 people 배열에서 people[i-1]을 제거하고 count를 1 더해준다.
    3. 그리고 people 배열이 0이 아니라면 위의 과정을 반복한다.

내 풀이가 가장 무거운 사람과 가장 가벼운 사람이 탈 수 있는지 검사하는 거였다면, 이 풀이는 사람들의 무게의 합이 limit에 가장 가깝게 유도를 하는 방법을 사용했다.

저작자표시 비영리 변경금지 (새창열림)

'Algorithm > Programmers(JavaScript)' 카테고리의 다른 글

[프로그래머스 자바스크립트] ‘최소직사각형’ 풀어보기  (2) 2024.08.07
[프로그래머스 자바스크립트] ‘K번째수’ 풀어보기  (1) 2024.08.07
[프로그래머스 자바스크립트] ‘체육복’ 풀어보기  (0) 2024.08.07
[프로그래머스 자바스크립트] ‘기능개발’ 풀어보기  (0) 2024.07.17
[프로그래머스 자바스크립트] ‘같은 숫자는 싫어’ 풀어보기  (4) 2024.07.17
'Algorithm/Programmers(JavaScript)' 카테고리의 다른 글
  • [프로그래머스 자바스크립트] ‘최소직사각형’ 풀어보기
  • [프로그래머스 자바스크립트] ‘K번째수’ 풀어보기
  • [프로그래머스 자바스크립트] ‘체육복’ 풀어보기
  • [프로그래머스 자바스크립트] ‘기능개발’ 풀어보기
퀵차분
퀵차분
Web Developer 🥐
  • 퀵차분
    QC's Devlog
    퀵차분
  • 전체
    오늘
    어제
    • 분류 전체보기 (178)
      • Frontend (31)
      • Fedify (4)
      • Study (42)
        • NestJS (2)
        • Node.js (3)
        • Modern JS Deep Dive (13)
        • SQL (1)
        • Network (1)
        • 프롬프트 엔지니어링 (4)
        • 인공지능 (9)
        • 시스템프로그래밍 (11)
        • 선형대수학 (1)
      • Intern (4)
      • KUIT (21)
      • Algorithm (48)
        • Baekjoon(C++) (26)
        • Programmers(JavaScript) (22)
      • 우아한테크코스(프리코스) (4)
      • Project (10)
        • crohasang_page (3)
        • PROlog (4)
        • Nomadcoder (2)
      • 생각 (4)
      • Event (7)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    프로그래머스
    리액트
    타입스크립트
    인공지능
    next.js
    시스템프로그래밍
    오블완
    프로그래머스 자바스크립트
    KUIT
    javascript
    fedify
    프론트엔드
    typescript
    HTML
    알고리즘
    백준
    음악추천
    자바스크립트
    티스토리챌린지
    react
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
퀵차분
[프로그래머스 자바스크립트] ‘구명보트’ 풀어보기
상단으로

티스토리툴바