체육복

최진훈·2022년 1월 31일
0

programmers

목록 보기
25/73

전체 학생수로 배열을 만들고 잃어버린 학생들을 -1, 여분이 있는 학생들을 +1 해준 뒤 앞뒤 학생을 비교해서 빌려주면 -1, 받으면 +1 해주는 식으로 코드를 구성해 보았다.

  1. 각 원소가 모두 1이고 사이즈가 n인 새로운 배열을 만든다.
  2. lost에 담긴 숫자의 인덱스는 -1, reserve에 담긴 숫자의 인덱스는 +1을 해준다.
  3. 새로운 배열의 원소중 0인 경우에
    3-1. 자신 앞의 숫자가 2인경우에 체육복을 빌려온다. ([i-1]--, [i]++)
    3-2. 자신 뒤의 숫자가 2인경우에 체육복을 빌려온다. ([i+1]--, [i]++)
  4. 각각의 원소를 answer에 더해준다.



    레고레고


대실패.. 도저히 불가능하고 오류가 너무 많이난다. 코드도 난잡하고 조건문만 계속 쌓여간다.
오늘은 인터넷을 찾아보고 공부하는 느낌으로 해봐야겠다.

source : https://kinetic27.github.io/2020/03/03/programmers-gym-suit/

이러한 탐욕법이라는 방식으로 구하는 답이 대부분이었다. 그러나 따로 차집합을 해주는 함수를 만들어서 해결하는 것이어서 최대한 따로 함수를 만들지 않는 방법을 찾아보았다.


source : https://sinna94.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%B2%B4%EC%9C%A1%EB%B3%B5%EC%BD%94%ED%8B%80%EB%A6%B0

테스트를 해보니 18,20번 케이스만 실패를 하길래 질문을 좀 찾아봤다. 두 케이스가 lostreserve가 정렬이 안된 상태로 입력되는 케이스라는 글을 발견해서 맨처음 sort()로 정렬을 해준 뒤 코드를 돌리니까 테스트도 통과할 수 있었다.

profile
레고레고

0개의 댓글