티스토리 뷰

[93] 이상한 출석 번호 부르기 1 ❌

📖question

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

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

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

출석 번호를 n번 무작위로 불렀을 때, 각 번호(1 ~ 23)가 불린 횟수를 각각 출력해보자.

입력
첫 번째 줄에 출석 번호를 부른 횟수인 정수 n이 입력된다. (1 ~ 10000)
두 번째 줄에는 무작위로 부른 n개의 번호(1 ~ 23)가 공백을 두고 순서대로 입력된다.

10
1 3 2 2 5 6 7 4 5 9

출력
1번부터 번호가 불린 횟수를 순서대로 공백으로 구분하여 한 줄로 출력한다.

1 2 1 1 2 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0

 

Tip::

  1. 파이썬에서는 배열의 비어있는 공간을 미리 확보해 놓을 수 없다.따라서 필요한 갯수 만큼 '어떠한 값'으로 초기화 시켜주어야 한다.
    • ex) LIST = list(range(23)) >> 0~22번지까지 0-22의 숫자들로 채워진다.
    • ex) LIST = [0 for _ in range(23)] >> 0~22번지까지 0으로 채워진다.
  2. 호출되는 번호(주소값)의 값을 기존 값에서 +1하여 저장해주는 방식으로 해당 번호가 몇 번 호출되었는지 카운트할 수 있다.
  3. 아래 코드에서 '*(Asterisk)'를 사용한 이유
    • 문제에서 원하는 출력값은 리스트 형태가 아닌, 내부의 원소를 그대로 출력하길 요구했기 때문이다.
    • ex) print( [1,2,3] ) >> [1,2,3]
    • ex) print( *[1,2,3] ) >> 1 2 3
    • '*(Asterisk)' 배우러가기

 

✍️answer

불린 출석번호와 배열의 방 번호가 같아야 한다. 

입력한 출석번호를 리스트로 잡고 for문을 돌려보면 i에 student의 값이 하나씩 들어가며 반복된다.

att = [0 for i in range(23)]  # 23칸을 0으로 채워 생성한다는 뜻
num = int(input())
student = map(int, input().split())
for i in student:  # student에 입력된 번호를 출력하는 것 (1 3 2 2 ...)
    att[i] += 1  # att[1]에 +1, att[3]에 +1 ...
print(*att)  # asterisk를 붙이면 리스트 형태가 아닌, 내부 원소를 그대로 출력

 

C언어 배열과 비교

배열을 선언하고 초기값을 넣어주지 않으면 쓰레기값이 출력된다.

원소를 추가할 때는 파이썬과 같고, 리스트 요소를 모두 출력하고 싶을 때 for문을 사용해야 한다.

#include <stdio.h>

int main()
{
    int a[5];
    a[1] = 1; 
    for (int i=0;i<5;i++){
        printf("%d\n", a[i]);
    }
    return 0;
}

'Python > 코드업 기초 100제' 카테고리의 다른 글

14. 1차원 배열(3)  (0) 2022.05.19
14. 1차원 배열 (2)  (0) 2022.05.17
13. 종합(2)  (0) 2022.05.15
13. 종합(1)  (0) 2022.05.15
12. 반복실행구조  (0) 2022.05.15
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday