본문 바로가기
알고리즘/프로그래머스

[프로그래머스] Lv2. 구명보트

by 1two13 2023. 3. 22.
728x90
반응형

다시 풀어도 접근법을 모르겠어서 기록한다. 

 

문제 링크


 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

조건


  • 최대 2명을 보트에 태울 수 있다.
  • 무게 제한이 있다.(limit)

 

정답 코드


function solution(people, limit) {
  // 내림차순 정렬(작은 => 큰)
  people.sort((a, b) => a - b);

  let i = 0;
  for (j = people.length - 1; i < j; j--) {
    if (people[i] + people[j] <= limit) i++;
  }

  return people.length - i;
}

for문 안에 식을 저렇게도 사용할 수 있다니.. 

1. 제일 작은 수와 제일 큰 수를 더한 값이 limit보다 큰 경우

2. 제일 작은 수와 그 다음으로 큰 수를 더하기

3. 1번부터 반복

 

1. 제일 작은 수와 제일 큰 수를 더한 값이 limit보다 작거나 같은 경우

2. 그 다음으로 작은 값과 그 다음으로 큰 값 더하기

3. 1번부터 반복

 

return 코드를 저렇게 쓴 것도 기발했다고 생각한다. 기본적으로 구명보트를 모든 사람이 각자 1번씩 사용한다고 가정하고, for문을 통해 구한 두 사람이 구명보트를 같이 사용한 횟수(i)를 빼주는 방식이다. 

 

 


질문이나 잘못된 점은 댓글로 남겨주세요 :)💖

728x90
반응형

댓글