JSITCLUB

알고리즘 - 최대값 구하기 본문

파이썬/알고리즘

알고리즘 - 최대값 구하기

jsitclub 2020. 7. 11. 22:56

이번에는 최댓값을 구하는 문제를 설명하겠습니다.

만약 두개의 변숫값 중 더 큰 값을 찾아야 한다면, 우리는 어렵지 않게 찾을 수 있을 겁니다.

a=int(input("a값을 입력하세요:"))
b=int(input("b값을 입력하세요:"))
if a>b:
	print("a")
else:
	print("b")

 

그런데 세개의 변숫값 중 제일 큰 값을 찾는 것이라면 조금 복잡해지지만, 쉽게 찾을 수 있습니다.

a=int(input("a값을 입력하세요:"))
b=int(input("b값을 입력하세요:"))
c=int(input("c값을 입력하세요:"))
if a>b:
	if a>c:
		print("a")
    else:
    	print("c")
else:
	if b>c:
		print("b")
    else:
    	print("c")

하지만 위와 같이 경우의 수를 모두 따져 찾는방법은 변수의 개수가 4개, 5개면 꽤 복잡해지고, 만약 변수가 10개쯤 넘어가면 찾기가 무척 힘들어질 겁니다. 때문에 우리는 다른 방법을 사용해야 합니다.

 

이 문제는 노래 대회에서 1등 뽑는 방법과 똑같습니다.

예를 들어 5명의 참가자가 있다고 했을때, 

1번째 참가자가 노래를 불렀더니 85점이 나왔습니다. 첫 번째 참가자가 노래를 부른 후 그때까지의 1등은 당연히 첫 번째 참가자 겠죠?

(현재 1등 : 1번째 참가자 / 85점)

 

2번째 참가자의 점수가 83점이 나왔다면 "현재 1등"보다 점수가 높지 않으니 1등은 여전히 1번째 참가자가 됩니다. 

(현재 1등 : 1번째 참가자 / 85점)

 

3번째 참가자의 점수가 90점이 나왔을때 "현재 1등"의 점수보다 점수가 높으므로 현재 1등이 바뀌게 됩니다. 

(현재 1등 : 3번째 참가자 / 90점)

 

4번째 참가자의 점수가 87점이 나왔을때 "현재 1등"보다 점수가 높지 않으니 1등은 여전히 3번째 참가자가 됩니다. 

(현재 1등 : 3번째 참가자 / 90점)

 

5번째 참가자의 점수가 95점이 나왔을 때 "현재 1등"보다 점수가 높으므로 현재 1등이 바뀌게 됩니다. 

(현재 1등 : 5번째 참가자 / 95점)

 

우리는 이 방법에서 일정한 규칙을 알 수 있습니다. 새로운 값을 현재 1등과 비교한 후 새로운 값이 더 크면 현재 1등을 바꾸는 것입니다. 이 방법을 사용하면, 참가자가 100명이든 1000명이든 같은 방법으로 끝까지 확인하면 우리는 제일 큰 값을 찾을 수 있게 됩니다.

위 예를 코드로 표현하면 다음과 같습니다.

scores=[85,83,90,87,95]
maxScore=0
for score in scores:
    if score>maxScore:
        maxScore=score

print(maxScore)

 

만약 최댓값의 위치를 알고 싶다면 다음과 같이 구할 수도 있습니다.

scores=[85,83,90,87,95]
maxScore=0
maxIndex=0

for i in range(len(scores)):
    if scores[i]>maxScore:
        maxScore=scores[i]
        maxIndex=i
print(maxIndex,maxScore)

 

최솟값은 같은 방법으로 이전의 최소값 보다 더 작을 때 바꾸면 됩니다. 단, 여기서 주의할 점은 최솟값 변수의 초기값을 0으로 하면 더 작은 값이 나올 수 없으므로 주의해야 합니다.

지금까지 최댓값, 최솟값 구하는 방법을 살펴봤습니다. 파이썬에는 물론 max() 함수와 min() 함수가 있지만, 처음 알고리즘을 공부한다면 잘 숙지하기 바랍니다.

'파이썬 > 알고리즘' 카테고리의 다른 글

알고리즘 - 두 변수의 값 바꾸기  (0) 2020.06.17
알고리즘 - 알고리즘 세우기  (0) 2020.06.01
Comments