220428_w2_프로그래머스_고득점kit_1차시 - Sunny-W-Park/elice-sw2-algorithms GitHub Wiki

박선우 - #완주하지못한선수

문제 해석

  • 대회 참여자, 완주자 이름 리스트가 주어지고, 참여자 이름 중 완주자 리스트에 없는 값을 찾아서 출력

접근

  • 딕셔너리로 구현
    • key: 참여자 이름
    • value: 참여자 이름 등장 횟수

풀이 과정

  • 참여자 리스트 확인 -> dict[참여자]의 value 값 1씩 증가
  • 완주자 리스트 확인 -> dict[완주자]의 value 값 1씩 감소
  • dict[참여자] value가 0보다 클 경우 return

김재민 - #K번째 수

문제 해석

  • array로 주어진 1차원 배열 List i번째 숫자부터 j번째 숫자까지 자르고 정렬하고 k번째수 반환

접근

  • command 순회하며 i와 j, k를 저장
  • 정렬 후 k번째수 인덱싱

풀이 과정

  • result list 초기화
  • command 2차원 배열 각 원소를 순회하며 처리
  • i와 j까지 slice
  • sorted를 이용하여 정렬
  • k번째 수를 result에 append

백성호 - #기능개발

문제 해석

  • 작업의 진도(100% 완료 기준) 와 작업의 속도가 배열로 주어지고, 배열의 앞에 있는 작업이 끝나기 전에는 그 다음 작업은 배포가 될 수 없다.
  • 배포는 하루에 한 번만 할 수 있으며, 하루에 끝에 이루어진다.
  • 뒤에 기능이 먼저 끝난 경우에는 앞에 기능이 배포될 때 같이 배포된다.
  • 각 배포마다 몇 개의 기능이 배포되는지를 한 배열에 담아서 return하는 함수를 작성해야 한다.

접근

  • 100에서 각 작업의 진도를 빼서 남은 작업 진도를 계산한다.
  • 남은 작업 진도를 작업의 속도로 나눠서, 깔끔히 나눠지는 경우에는 나눗셈의 몫이 배포까지 남은 날짜 수이고, 나눠지지 않는 경우에는 (나눗셈의 몫+1)이 배포까지 남은 날짜 수이다.
  • 스택을 활용해서, 스택에 첫번째 날짜 수와 다음 날짜 수들을 차례대로 push했을 때 첫 번째 날짜보다 다음 날짜가 큰 경우에만 스택을 비우고 스택에 있던 날짜 수의 개수 만큼을 정답 배열에 추가한다.
  • 마지막에 스택에 남은 날짜 수의 개수도 정답 배열에 추가한다.

풀이 과정

  • 작업 진도 배열의 하나의 요소 마다 남은 작업 진도를 계산 후, 남은 날짜 수를 계산하여, release_day라는 배열에 추가한다.
  • ans 배열과 빈 stack 배열을 만든다.
  • 위의 접근법에 따라서 각 남은 날짜 수 마다 스택에 push만 하거나, 스택의 원소 개수를 ans배열에 추가 후, 스택 초기화, push를 한다.
  • 마지막에 스택에 남은 날짜수의 개수를 ans 배열에 추가한다.

지의신 - #더 맵게

문제 해석

  • scoville에 주어지는 자연수 배열의 모든 값이 K이상으로 만들어야한다.
  • 모든 값을 K이상으로 만들 수 없는 경우에는 -1을 반환
  • K 이상으로 만들기 위해 배열에서 가장 작은 두 자연수를 섞는다.
  • 섞는 공식 => 섞은 값 = 가장 작은 수 + (두 번째로 작은 수 * 2)
  • 섞은 횟수를 반환

접근

  • 매번 섞을 값 두개를 찾아야 하므로 heapq를 떠올릴 수 있다.
  • 제일 작은수가 K보다 크다면 모든 값이 K이상이므로 조건에 충족된다.
  • 모든 값이 K이상이 아닌 상태에서 heapq가 empty라면 -1을 반환 (모든 값을 K이상으로 만들 수 없기 때문에)

풀이 과정

  • answer를 0으로 초기화
  • 주어지는 scoville를 heapify해서 heapq로 만든다.
  • heapq가 empty가 아닐 때 까지 while문을 돌린다.
  • 먼저 하나를 pop하고, 그 값이 K보다 크다면 answer를 반환한다.
  • 그 값이 K보다 작다면 heapq가 empty인지 확인하고 두번째 값을 pop한다.
  • 만약에 heapq가 empty 였다면 -1를 반환
  • 새로운 값(c = a+(b*2))을 계산한 뒤 heapq에 넣는다. 그리고 answer를 1 증가시킨다.