[CodeUp 기초 100제] 6092번 풀이 with 파이썬(python)

Jeony·2021년 9월 16일
0

codeup 기초 100제

목록 보기
92/98
post-thumbnail

문제

리스트

정보 선생님은 수업을 시작하기 전에 이상한 출석을 부른다.

선생님은 출석부를 보고 번호를 부르는데,
학생들의 얼굴과 이름을 빨리 익히기 위해 번호를 무작위(랜덤)으로 부른다.

그리고 얼굴과 이름이 잘 기억되지 않는 학생들은 번호를 여러 번 불러
이름과 얼굴을 빨리 익히려고 하는 것이다.

출석 번호를 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=' ')

참고

  • d = [] #어떤 데이터 목록(list) 을 순서대로 저장하기 위해 아무것도 없는 리스트 변수 만들기
  • d.append(값) #d 리스트의 마지막에 원하는 값을 추가(append)해 넣음
  • d[a[i]] += 1 #2중 리스트 참조 : 만약 a[i]의 값이 1이었다면? d[1] += 1 이 실행되는 것이다. 1번 카운트 1개 증가..

입력 예시

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()
  1. 변수 a는 리스트형식이지만, 그 안에 있는 값 중 하나의 형태를 print(type(a[0])) 출력해보면 문자열(string)으로 나온다. 그것을 for문 반복문으로 정수(int)로 변환해서 다시 넣어준다.
for i in range(n) :
    a[i] = int(a[i])
  1. 반 번호는 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)
  1. 입력 값중 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
  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(): 괄호 안의 내용을 출력!

profile
알고리즘으로 문제를 해결하자 (ʘ言ʘ╬)

0개의 댓글