문제
이 프로그램은 정수형 배열 arr에 숫자를 입력 받고, 그 중 가장 작은 수 하나를 제거하고 arr를 반환하는 프로그램이다. 단, 반환하려는 배열이 빈 배열인 경우(원소가 하나 뿐이라서 가장 작은 수를 제거하면 배열이 비어버리는 경우)에는 -1을 반환한다.
먼저 배열의 길이를 if문으로 측정해, 배열의 원소가 1개 뿐이면 (가장 작은 수 하나가 제거된 후)반환 될 배열이 비어 버리므로 -1을 반환 되도록 한다. 배열의 길이가 1 이상이면, min이라는 변수에 배열의 첫 번째 원소를 저장한 뒤, 나머지 원소와 비교를 하며 배열에서 가장 작은 수를 저장한다. 더불어 index를 두어, 가장 작은 수의 위치를 파악한다. 그 후 리스트 answer에 arr를 그대로 복사해 넣고 가장 작은 수의 인덱스를 통해 answer에서 제거한다. 그리고 가장 작은 수가 제거된 리스트가 반환 된다.
실행 결과 :
10(원소를 한 개만)을 입력했을 때의 실행 결과이다.
이 문제에서 가장 고민했던 것은, '어떻게 배열의 순서를 유지하며 가장 작은 수만 빼낼 것인가'였다. 정렬을 시켜버리면 가장 작은 수는 바로 찾을 수 있겠지만 배열의 순서가 바뀌어버린다. 게다가 배열에서 가장 작은 수를 삭제 한다고 해도 삭제한 공간이 뻥 뚫려버리는 문제가 있었다. 물론 반환 되는 answer를 배열로 두고도 이리저리 하다 보면 처리가 가능할 수도 있겠지만, 이 문제는 삽입과 삭제가 유용한 리스트로 해결하는 것이 나을 것이라고 판단했다. 그렇게 정하고 나니 나머지는 쉽게 구상할 수 있었다. 가장 작은 수의 인덱스를 찾아 리스트에서 삭제해주면 되었다.
출처 : https://programmers.co.kr/learn/courses/30/lessons/12935
'코딩 테스트 문제 > 프로그래머스' 카테고리의 다른 글
x만큼 간격이 있는 n개의 숫자 (0) | 2018.09.19 |
---|---|
하샤드 수 (0) | 2018.09.17 |
콜라츠 추측 (0) | 2018.09.17 |
서울에서 김서방 찾기 (0) | 2018.09.15 |
이상한 문자 만들기 (0) | 2018.09.15 |