본문 바로가기

알고리즘 & 코딩테스트/코딩테스트

Programmers Lv1. "제일 작은수 제거하기"

Programmers Lv1. 제일 작은 수 제거하기, 연습문제, 정답률 83%

요번 문제는 굉장히 쉬운 문제이다.
그런데 "제일 작은수"라는 말에서 문득 떠오른게 하나있다.
우리가 코딩테스트를 보다보면 가장 큰 수 혹은 작은 수, 선형구조상의 이들의 위치파악 등에 대한 이야기를 많이 하게된다. 쉬운개념이고 누구나 구현할 수 있지만 이번기회에 문제풀이와 동시에 정리해보려고 한다.

먼저, 문제풀이부터 해보자! Programmers Lv.1 "제일 작은 수"
1. 정수가 저장한 배열, arr에서 가장 작은 수를 제거하는 기능을 구현해야 한다.
2. 빈 배열인 경우 [-1]을 리턴한다.
3. [10]인 경우 [-1]을 리턴한다.
4. 일반적인 배열의 경우 가장 작은 수를 제거한 배열을 리턴한다.

핵심 알고리즘을 보자.
1. 매개변수 arr가 빈배열이거나 [10]인 경우
   1-1. return [-1]
2. 1의 조건이외인 경우
   2-1. 최솟값을 찾는다
   2-2. 최솟값에 해당하는 index를 찾는다
   2-3. 해당 index에 해당하는 원소를 제거한다.
   2-4. 제거한 후 arr를 return한다.

이를 코드로 옮기면 다음과 같다.

solution.py

여기서 필자가 이야기하고 싶었던 내용을 먼저 꺼내보려고 한다.
필자의 코드에서 아래 부분을 눈여겨보는것이 좋다.

del mylist[mylist.index(min(mylist))]

요 부분이 최솟값에 해당하는 원소를 특정하여 그 원소의 인덱스를 찾은뒤 삭제해주는 부분인 것이다.

원소가 1개이상 존재하는 선형 리스트에 대해서 최솟값, 최댓값의 인덱스를 찾는방식을 알아보자 :)

'''
선형 리스트에 대해서 최댓값, 최솟값을 가지는 인덱스를 찾은뒤 이를 삭제하는 코드를 다양하게 짜보자!
'''
list = [com1, com2, com3, ...]

# min()과 indeX()를 활용한 최솟값과 그 인덱스 서치
val_min = min(list)
val_min_index = list[list.index(min(list))]

# max()와 indeX()를 활용한 최댓값과 그 인덱스 서치
val_max = max(list)
val_max_index = list[list.index(max(list))]

# --------------------------------------------------------------------
import numpy as np

# numpy 모듈을 활용한 최솟값과 그 인덱스 서치
np_val_min_index = np.argmin(list)
np_val_min = np.min(list)

# numpy 모듈을 활용한 최댓값과 그 인덱스 서치
np_val_max_index = np.argmax(list)
np_val_max = np.max(list)

역시 numpy가 효율성이 좋다ㅎㅎ