문제 설명 👨🏻💻
https://www.acmicpc.net/problem/2562
2562번: 최댓값
9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오. 예를 들어, 서로 다른 9개의 자연수 3, 29, 38, 12, 57, 74, 40, 85, 61 이 주어
www.acmicpc.net
코드 구현 👨🏻💻
- 알고리즘 종류:
- 시간복잡도: O(n)
lists=[]
for i in range(9):
N=int(input())
lists.append(N)
#print(lists)
a=max(lists)
print(a)
print(lists.index(a)+1)
풀이 방법 👨🏻💻
- 1차 시도
9번 입력받는 걸 못본 실수도 있었고 enumerate를 사용해서 리스트를 입력받으면 idx,value 값이 부여되어 리스트가 생성되긴 하는데 max()에서 에러가 났다. 이건 왜 그러는 지 모르겠다.
lists= list(enumerate(map(int,input().split())))
a = max(lists)
print(a[0][1])
print(a[0][0])
=> 에러 남. 'int' object is not subscriptable
=> 인덱스를 갖지않는 값에 인덱스를 가지게 코드를 짤 경우 발생하는 오류
- 최종
lists=[]
for i in range(9):
N=int(input())
lists.append(N)
#lists += N => TypeError: 'int' object is not iterable #print(lists)
a=max(lists)
print(a)
print(lists.index(a)+1)
enumerate 사용을 포기하고 for문을 돌려 max()와 index()로 답을 구 할 수 있던 문제.
최종for문 안에서 배열에 input값을 추가한 다음원래는 lists.append(N)이 아닌, ‘+=’ 로 풀려고 했었는데
int is not iterable 이슈가 발생하였다.
그 이유는 list()로 생성된 lists는 iterable한 인자만 받을 수 있는데
list += N 을 해버리면 N은 int로 정의한 constant 변수이기 때문이었다.
따라서 append라는 iterable한 함수 안에 N을 집어넣어서 추가 해주면 아무런 문제가 생기지 않는다.
또한 리스트에 어떠한 항목을 하나(씩)만 추가하는 경우에는 += 보다 append가 더 속도가 빠르기 때문에,
반복문 안에서 리스트에 어떤 항목을 삽입하려고 할 땐 append를 써야겠다.
'코테 준비 > BOJ' 카테고리의 다른 글
| 백준 1157번: 단어 공부 (0) | 2023.03.23 |
|---|---|
| 백준 2475번: 검증수 (0) | 2023.03.22 |