본문 바로가기
파이썬 코드업 기초 100제

파이썬 코드업 기초 14 - 1차원 배열

by chanfficial 2022. 2. 10.

93. 정보 선생님은 수업을 시작하기 전에 이상한 출석을 부른다. 선생님은 출석부를 보고 번호를 부르는데, 학생들의 얼굴과 이름을 빨리 익히기 위해 번호를 무작위(랜덤)으로 부른다. 그리고 얼굴과 이름이 잘 기억되지 않는 학생들은 번호를 여러 번 불러 이름과 얼굴을 빨리 익히려고 하는 것이다. 출석 번호를 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

 

정답 :

n = int(input())
rand = map(int, input().split())
student = [0 for _ in range(23)]
for r in rand:
  student[r-1] += 1
print(*student)

 - 먼저 출석번호를 부른 횟수(n)를 입력받고 무작위로 부른 n개의 번호들을 입력받는다. 1번부터 23번까지 번호가 불린 횟수를 출력해야 하므로 리스트에 0부터 22번째 인덱스까지 전부 0을 지정해준 다음, student[r-1] = r 인데, 같은 부른 횟수만큼 값이 1씩 증가해야 하므로 student[r-1] = student[r-1]+1 로 작성했고 전체 리스트를 * 를 사용하여 하나씩 언패킹하여 출력하게 했다.

 

 

94. 출석 번호를 n번 무작위로 불렀을 때, 부른 번호를 거꾸로 출력해 보자.

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

10
10 4 2 3 6 6 7 9 8 5

출력
출석을 부른 번호 순서를 바꾸어 공백을 두고 출력한다.

5 8 9 7 6 6 3 2 4 10

Tip : 리스트의 메소드인 reverse()를 이용하면 된다.

 

 

정답 :

n = int(input())
rand = list(map(int, input().split()))
rand.reverse()
print(*rand)

- 먼저 출석 번호를 부른 횟수를 입력받은 다음, 무작위로 부른 n개의 번호(1~23)를 입력받아서 리스트의 메소드인 reverse로 그 값을 반대로 출력하도록 했다.

 

 

 

95. 출석 번호를 n번 무작위로 불렀을 때, 가장 빠른 번호를 출력해 보자.

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

10
10 4 2 3 6 6 7 9 8 5

출력
출석을 부른 번호 중에 가장 빠른 번호를 1개만 출력한다.

2

Tip :

  1. 가장 작은 값을 찾으면 된다.
  2. 파이썬에서는 배열(iterable) 객체의 원소 중 가장 작은 값을 반환해주는 min() 함수를 제공하고 있다.

 

정답 :

n = int(input())
rand = map(int, input().split())
print( min(rand) )

- 출석 번호를 부른 횟수를 입력받고 무작위로 부른 n개의 번호(1~23)를 입력받은 다음, 배열 객체의 요소 중 가장 작은 값을 반환하는 min() 함수를 사용하여 가장 빠른(작은) 번호를 출력하게 했다.