정보 선생님은 수업을 시작하기 전에 이상한 출석을 부른다.
선생님은 출석부를 보고 번호를 부르는데,
학생들의 얼굴과 이름을 빨리 익히기 위해 번호를 무작위(랜덤)으로 부른다.
그리고 얼굴과 이름이 잘 기억되지 않는 학생들은 번호를 여러 번 불러
이름과 얼굴을 빨리 익히려고 하는 것이다.
출석 번호를 n번 무작위로 불렀을 때, 각 번호(1 ~ 23)가 불린 횟수를 각각 출력해보자.
n = int(input()) #개수를 입력받아 n에 정수로 저장
a = input().split() #공백을 기준으로 잘라 a에 순서대로 저장
for i in range(n) : #0부터 n-1까지...
a[i] = int(a[i]) #a에 순서대로 저장되어있는 각 값을 정수로 변환해 다시 저장
d = [] #d라는 이름의 빈 리스트 [ ] 변수를 만듦. 대괄호 기호 [ ] 를 사용한다.
for i in range(24) : #[0, 0, 0, ... , 0, 0, 0] 과 같이 24개의 정수 값 0을 추가해 넣음
d.append(0) #각 값은 d[0], d[1], d[2], ... , d[22], d[23] 으로 값을 읽고 저장할 수 있음.
for i in range(n) : #번호를 부를 때마다, 그 번호에 대한 카운트 1씩 증가
d[a[i]] += 1
for i in range(1, 24) : #카운트한 값을 공백을 두고 출력
print(d[i], end=' ')
10
1 3 2 2 5 6 7 4 5 9
1 2 1 1 2 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
n = int(input())
a = input().split()
for i in range(n) :
a[i] = int(a[i])
d = []
for i in range(24) :
d.append(0)
for i in range(n) :
d[a[i]] += 1
for i in range(1, 24) :
print(d[i], end=' ')
n = int(input())
a = input().split()
for i in range(n):
a[i] = int(a[i])
d = []
for i in range(24):
d.append(0)
for i in range(n):
d[a[i]] += 1
for i in range(1, 24):
print(d[i], end=" ")
이번 문제는 예시를 봐도 이해가 잘 안되더라고요😨😭
그래도 계속 보니까 이해가 되었어요..
제가 이해한 것을 알려드릴께요!
문제를 풀어서 설명하면 "0 ~ 23의 번호가 있는데 무작위로 번호를 부른다면 각각의 번호는 몇번씩 불러졌나?"를 구하는 것이다.
ex) 0 1 2 0 2 1
0번은 0번
1번은 1번
2번은 2번
0번은 0번
1번은 1번 불러졌다.
입력 예시:9 1 3 2 2 5 6 7 4 5 9
🔍모델 답안 풀이
1. 번호를 총 몇 번 부를건지 입력 받기 위해 n 변수 선언
2. 불러지는 번호의 입력을 띄엄띄엄 받기 위해 a 변수 선언
a 변수에 위의 입력 예시처럼 여러개를 넣으면 a는 list가 된다.
a 안에는 a = [1, 3, 2, 2, 5, 6, 7, 4, 5, 9] 이렇게 여러개의 데이터가 쌓여있다.n = int(input()) a = input().split()
- 변수 a는 리스트형식이지만, 그 안에 있는 값 중 하나의 형태를 print(type(a[0])) 출력해보면 문자열(string)으로 나온다. 그것을 for문 반복문으로 정수(int)로 변환해서 다시 넣어준다.
for i in range(n) : a[i] = int(a[i])
- 반 번호는 0 ~ 23까지 있다고 했다.
빈 리스트([ ])를 만들고 반 번호 (0 ~ 23)를 하나 하나 넣는다.
그러면 d 안에는 리스트 형식으로 d = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...., 0] 이렇게 0이 24개 들어간다.d = [] for i in range(24) : d.append(0)
- 입력 값중 n은 10이 들어가 있다.
a에는 a = [1, 3, 2, 2, 5, 6, 7, 4, 5, 9]
밑의 코드 d[a[i]] += 1에서 a[i]의 i에는 변수 a의 0 ~ 9번까지 반복이 되면서 들어갈 것이다.
그러면 이렇게 d 리스트([ ])안에 이렇게 들어가게 된다.
d[1] += 1
d[3] += 1
d[2] += 1
d[2] += 1
d[5] += 1
d[6] += 1
d[7] += 1
d[4] += 1
d[5] += 1
d[9] += 1
그리고 변수 d 안의 번호 별로 +1이 될 것이다.for i in range(n): d[a[i]] += 1
- 결국 d에는 값이
d = [0, 1, 2, 1, 1, 2, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
이렇게 된다.
번호 0번은 0번 불림
번호 1번은 1번 불림
번호 2번은 2번 불림
번호 1번은 1번 불림 ...for i in range(1, 24) : print(d[i], end=' ')
그것을 출력하면 번호별로 불린 횟수.
1 2 1 1 2 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0이 나온다.
👻 끝! 👽
input(): 프롬프트를 띄워서 사용자의 입력 받을 수 있게 해준다.
(단, 입력 받은 것은 문자열로 저장된다. print(type()))으로 type() 괄호 안에 변수를 넣고 찍으면 정수인지, 문자열인지, 무슨 타입인지 확일 할 수 있다!)
int(n): 위의 input()에서 말했듯이 input으로 받은 값은 문자열로 저장된다.
산술을 하기 위해, 문자열을 정수로 변환시켜주는 int()를 써서 변환시켜준다.
[ ] list: 변수 안에 여러가지의 값을 넣을 수 있다.
선언 예시)
a = []
b = ["a", "b", "c"]
출력 예시)
print(a[]) -> 빈공간
print(b[0]) -> a
print(b[1]) -> b
print(b) -> ["a", "b", "c"]
for문: 반복을 데이터가 남을 때까지 밑에 내용 계속 반복 실행!
for i in 데이터:
(들여쓰기칸) 실행문
ex)
for i in [1, 2 ,3]:
print(i)
출력: 1
2
3
데이터에는 iterable이 들어갈 수 있다.
range(): 괄호 안에 들어가는 숫자만큼의 수열을 표현해준다.
range(3) -> 0, 1, 2 (0부터 3직전까지 표현)
range(1, 3) -> 1, 2 (1부터 시작해서 3직전까지 표현)
range(1, 3, +2) -> 1 (1부터 시작해서 2씩 늘려가서 3직전까지 표현. (1 + 2는 3이므로 3직전까지 표현))
print(): 괄호 안의 내용을 출력!