티스토리 뷰
< 문제 >
선생님이 학생들의 이름을 외우기 위해 무작위 출석부를 부른다. 각 학생들이 몇 번 불렸는지 알려주는 프로그램을 작성해라.
< 문제 푸는 방법 >
- 1 ~ 23 사이에 있는 정수가 입력되었는지 확인하는 프로그램이다.
=> 1차원 리스트로 student[1] = y : 1번 학생이 y번 불렸다.
< 코드 1 > for 문 이용
num = int(input()) # 반복횟수
a = list(map(int, input().split())) #이상한 출석부 입력받기
student = [0]*23 # 0으로 채워진 리스트
for i in range(num):
student[a[i]-1] += 1
print (" ".join(repr(i) for i in student)) # student list 출력
📌 student [ a[i]-1 ] += 1
- 리스트는 0 부터 시작합니다. ( 시작 인덱스 = 0 )
=> student 라는 리스트가 있을 때, 0번에 1번 학생의 정보가 들어가고, student[22]에 23번의 학생이 들어가게 됩니다.
=> i = 3 일 때, 1번 학생의 출석을 불렀다고 가정하면, a[3] = 1 이므로, student[ a[i]-1 ] = student[0] 이 됩니다.
따라서 이름이 불릴 때 마다 횟수가 늘어나는 코드가 됩니다.
< 코드 2 > 조금 더 직관적인 코드 (?)
num = int(input())
a = list(map(int, input().split()))
student = [0]*23
for i in a: #a는 반복가능한 형태
student[i-1] += 1
print (" ".join(repr(i) for i in student))
📌 a는 반복 가능한 형태이므로 range 가 아닌 in으로 사용하여 바로 탐색가능합니다.
✏️ student 가 문자열이 아닌 정수형으로 이루어져 있는 형태이므로, repr(정수 -> 문자열)로 바꾼 후 join함수를 사용합니다.
< 코드 3 > count 함수 사용
num = int(input())
a = list(map(int, input().split()))
student = [0]*23
for i in a:
student[i-1] = a.count(i) # count 함수 사용
print (' '.join(repr(i) for i in student))
📌 list의 내장함수 count는 찾고자 하는 원소의 개수를 세어 반환해주는 함수입니다.
- for 문을 통해 출석부 부른 순으로 탐색합니다.
- count 함수를 통해 부른 횟수를 student[i-1]에 저장하고, 그 결과를 출력하면 됩니다.
✏️ 실행시간도 오래 걸리며, 불필요한 계산과정이 많아 좋은 방법은 아니라고 생각합니다.
a가 1 3 2 2 5 5 2 3 5 9 일 때, 1, 2, 3, 5, 9 총 5번의 count 함수로 결과값을 알 수 있으나, 실제로 10번 모두 호출됩니다..
밑에 사진 보시면 실행시간이 1926입니다... (코드 3, 코드 2, 코드 1 순서)
+ zest1923.tistory.com/38?category=852295 join, repr 언급 부분
'Algorithm > [Python] Code Up_basic100' 카테고리의 다른 글
[ 6094 ] 코드업 6094 : 이상한 출석 번호 부르기 3 (0) | 2021.04.13 |
---|---|
[ 6093 ] 코드업 6093 : 이상한 출석 번호 부르기 2 (0) | 2021.04.13 |
[ 6091 ] 코드업 6091 : 함께 푸는 날 (0) | 2021.04.12 |
[ 6090 ] 코드업 6090 : 수 나열하기 3 (1) | 2021.04.12 |
[ 6089 ] 코드업 6089 : 수 나열하기 2 (0) | 2021.04.12 |
- Total
- Today
- Yesterday
- 리플릿
- for문
- 정답
- 깃허브
- 깃
- 코드업
- 코드 업
- do while
- ord
- 파이썬
- 레플릿
- 설명
- 시간초과
- CodeUp
- 반복문
- 프로그래머스
- 기초 100제
- 백준
- CHR
- COMMIT
- Code up
- 16진수 입력
- SwiftUI
- Swift
- replit
- 부르트포스
- baekjoon
- level1
- 이것이 코딩테스트다
- python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |