일차원 배열
목차
최소, 최대
난이도 : Bronze III
문제
N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.
풀이
N = int(input()) numList = list(map(int, input().split())) print(min(numList), max(numList))
min(), max()
를 통해 List에서 최소값, 최대값을 찾을 수 있다.
최댓값
난이도 : Bronze II
문제
9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오.
예를 들어, 서로 다른 9개의 자연수
3, 29, 38, 12, 57, 74, 40, 85, 61
이 주어지면, 이들 중 최댓값은 85이고, 이 값은 8번째 수이다.
입력
첫 째 줄부터 아홉 번째 줄까지 한 줄에 하나의 자연수가 주어진다. 주어지는 자연수는 100 보다 작다.
풀이
idx, maxNum = 0, 0 for i in range(1, 10): num = int(input()) if num > maxNum: idx, maxNum = i, num print(f'{maxNum}\n{idx}')
- 이전까지의 index에서 가장 큰 값보다 현재 값이 클경우
idx
와maxNum
을 변경해주었다.
- 이전까지의 index에서 가장 큰 값보다 현재 값이 클경우
숫자의 개수
난이도 : Bronze II
문제
세 개의 자연수 A, B, C가 주어질 때 A×B×C를 계산한 결과에 0부터 9까지 각각의 숫자가 몇 번씩 쓰였는지를 구하는 프로그램을 작성하시오.
예를 들어 A = 150, B = 266, C = 427 이라면
A × B × C = 150 × 266 × 427 = 17037300 이 되고,
계산한 결과 17037300 에는 0이 3번, 1이 1번, 3이 2번, 7이 2번 쓰였다.
입력
첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 같거나 크고, 1,000보다 작은 자연수이다.
풀이
N = 1 result = [0]*10 for _ in range(3): N *= int(input()) for num in str(N): result[int(num)] += 1 for i in range(10): print(result[i])
- 세 숫자의 곱셈을 계산한 후
- 각 자리수의 인덱스 위치에 Count를 1 씩 늘려주었다.
나머지
난이도 : Bronze II
문제
두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다.
수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.
입력
첫째 줄부터 열번째 줄 까지 숫자가 한 줄에 하나씩 주어진다. 이 숫자는 1,000보다 작거나 같고, 음이 아닌 정수이다.
풀이
result = set() for _ in range(10): result.add(int(input()) % 42) print(len(result))
set()
을 사용하면 중복되는 값을 없앨 수 있다.
평균
난이도 : Bronze I
문제
세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 M이라고 한다. 그리고 나서 모든 점수를 점수/M*100으로 고쳤다.
예를 들어, 세준이의 최고점이 70이고, 수학점수가 50이었으면 수학점수는 50/70*100이 되어 71.43점이 된다.
세준이의 성적을 위의 방법대로 새로 계산했을 때, 새로운 평균을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보다 크다.
풀이
N = int(input()) scores = list(map(int, input().split())) maxNum = max(scores) for i in range(N): scores[i] *= 100 / maxNum / N print(sum(scores))
- 각 index 위치의 점수에
100 / (maxNum * N)
을 곱해준 후 모든 인덱스의 값을 더해주었다.
- 각 index 위치의 점수에
OX퀴즈
난이도 : Bronze II
문제
"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다.
"OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.
OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다. 문자열은 O와 X만으로 이루어져 있다.
풀이
T = int(input()) for _ in range(T): quiz = input() answer, cnt = 0, 0 for ox in quiz: if ox == 'O': cnt += 1 answer += cnt else: cnt = 0 print(answer)
O
일 경우 count를 1씩 증가시켜주고 count를 answer에 더해주었다.X
일 경우 count를 0으로 초기화해준다.
평균은 넘겠지
난이도 : Bronze I
문제
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
입력
첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
풀이
T = int(input()) for _ in range(T): N, *scores = map(int, input().split()) average = sum(scores) / N result = 0 for score in scores: if score > average: result += 1 result = str(round(result / N * 100, 3)).split('.') result[1] += '0' * (3 - len(result[1])) print('.'.join(result) + '%')
- 소수점 부분을 신경 써줘야한다.
round(number, 소수점 아래 자리수)
를 써서 반올림해줄 수 있다..
을 기준으로 나눠준 후 소수점 뒤의 길이가 3이 되지않을 경우0
을 더 붙여주었다.
'PS > baekjoon' 카테고리의 다른 글
(Python) 단계별로 풀어보기 - 문자열 (0) | 2020.12.02 |
---|---|
(Python) 단계별로 풀어보기 - 함수 (0) | 2020.12.01 |
(Python) 단계별로 풀어보기 - while문 (0) | 2020.11.29 |
(Python) 단계별로 풀어보기 - for문 (0) | 2020.11.29 |
(Python) 단계별로 풀어보기 - if문 (0) | 2020.11.28 |