JSITCLUB
알고리즘 - 최대값 구하기 본문
이번에는 최댓값을 구하는 문제를 설명하겠습니다.
만약 두개의 변숫값 중 더 큰 값을 찾아야 한다면, 우리는 어렵지 않게 찾을 수 있을 겁니다.
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 |