https://www.acmicpc.net/problem/10818
문제
N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.
출력
첫째 줄에 주어진 정수 N개의 최솟값과 최댓값을 공백으로 구분해 출력한다.
예제 입력 1 복사
5
20 10 35 30 7
예제 출력 1 복사
7 35
import sys
n = int(input())
a = list(map(int,sys.stdin.readline().split()))
print(min(a),max(a),end=" ")
간단하게 내장된 모듈 사용하면 해결할 수 있는 문제!
https://www.acmicpc.net/problem/2562
문제
9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오.
예를 들어, 서로 다른 9개의 자연수
3, 29, 38, 12, 57, 74, 40, 85, 61
이 주어지면, 이들 중 최댓값은 85이고, 이 값은 8번째 수이다.
입력
첫째 줄부터 아홉 번째 줄까지 한 줄에 하나의 자연수가 주어진다. 주어지는 자연수는 100 보다 작다.
출력
첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 몇 번째 수인지를 출력한다.
예제 입력 1 복사
3
29
38
12
57
74
40
85
61
예제 출력 1 복사
85
8
a = []
for i in range(9):
a.append(int(input()))
print(max(a))
print(a.index(max(a))+1)
👽해설👽
- 빈 리스트를 만들어준다.
- 9개를 띄어쓰기가 아닌 엔터를 기준으로 입력 받아야 하니 append를 사용해서 입력받아 준다.
- 내장 모듈을 사용해서 max값을 구한다.
- 구한 a의 max값의 자리수를 찾기 위해서는 index함수를 사용해서 찾아주고 이때 +1을 하는 이유는 인덱스는 0부터 시작하기 때문에 +1을 해주어 찾아야 한다. 우리는 1번째 2번째.. 이런식으로 진행하기 때문이다!!
https://www.acmicpc.net/problem/2577
문제
세 개의 자연수 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보다 작은 자연수이다.
출력
첫째 줄에는 A × B × C의 결과에 0 이 몇 번 쓰였는지 출력한다. 마찬가지로 둘째 줄부터 열 번째 줄까지 A × B × C의 결과에 1부터 9까지의 숫자가 각각 몇 번 쓰였는지 차례로 한 줄에 하나씩 출력한다.
예제 입력 1 복사
150
266
427
예제 출력 1 복사
3
1
0
2
0
0
0
2
0
0
a = int(input())
b = int(input())
c = int(input())
d = str(a*b*c)
for i in range(10):
print(d.count(str(i)))
👽해설👽
- a, b, c를 전부 입력 받아주고 d에 배열로 저장해준다.
- 그리고 count 함수를 사용해서 각각의 수를 세준다.
https://www.acmicpc.net/problem/3052
나머지 출처다국어
한국어
시간 제한메모리 제한제출정답맞은 사람정답 비율
1 초 | 128 MB | 65162 | 38709 | 33718 | 60.134% |
문제
두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다.
수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.
입력
첫째 줄부터 열번째 줄 까지 숫자가 한 줄에 하나씩 주어진다. 이 숫자는 1,000보다 작거나 같고, 음이 아닌 정수이다.
출력
첫째 줄에, 42로 나누었을 때, 서로 다른 나머지가 몇 개 있는지 출력한다.
예제 입력 1 복사
1
2
3
4
5
6
7
8
9
10
예제 출력 1 복사
10
예제 입력 2 복사
42
84
252
420
840
126
42
84
420
126
예제 출력 2 복사
1
모든 수를 42로 나눈 나머지는 0이다.
예제 입력 3 복사
39
40
41
42
43
44
82
83
84
85
예제 출력 3 복사
6
n = []
for _ in range(10):
a = int(input())
b = a % 42
n.append(b)
s = set(n) #자료형의 중복을 제거 해주면 결과적으로 겹치는 것은 1개씩만 나오게 됨
print(len(s))
👽해설👽
- 빈 리스트를 선언해준다.
- 10개의 수를 입력받아야 하니 for문을 통해 입력받고 입력받은 수를 곧바로 42로 나눠 나머지를 빈 리스트 n에 저장해준다.
- set 함수는 자료형의 중복을 제거 해주는 함수로 결과적으로는 겹치는 수는 1개씩만 나오게 해준다.
- set( ) 함수를 통해서 중복을 제거한 뒤 리스트의 길이를 구하면 이것이 나머지의 개수를 구할 수 있는 것이다.
https://www.acmicpc.net/problem/1546
평균 스페셜 저지
시간 제한메모리 제한제출정답맞은 사람정답 비율
2 초 | 128 MB | 103083 | 50511 | 42496 | 48.982% |
문제
세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 M이라고 한다. 그리고 나서 모든 점수를 점수/M*100으로 고쳤다.
예를 들어, 세준이의 최고점이 70이고, 수학점수가 50이었으면 수학점수는 50/70*100이 되어 71.43점이 된다.
세준이의 성적을 위의 방법대로 새로 계산했을 때, 새로운 평균을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보다 크다.
출력
첫째 줄에 새로운 평균을 출력한다. 실제 정답과 출력값의 절대오차 또는 상대오차가 10-2 이하이면 정답이다.
예제 입력 1 복사
3
40 80 60
예제 출력 1 복사
75.0
예제 입력 2 복사
3 10 20 30
예제 출력 2 복사
66.666667
10-2 이하의 오차를 허용한다는 말은 정확히 소수 2번째 자리까지 출력하라는 뜻이 아니다.
예제 입력 3 복사
4 1 100 100 100
예제 출력 3 복사
75.25
예제 입력 4 복사
5 1 2 4 8 16
예제 출력 4 복사
38.75
예제 입력 5 복사
2 3 10
예제 출력 5 복사
65.0
<오답>
N = int(input())
a = list(map(int,input().split()))
m = max(a)
for i in range(N):
c = a[i]/m*100
a.append(c)
ave = sum(a)/len(a)
print(ave)
idle로 돌렸을 땐 정답이 맞았다. 그러나 오차범위때문인지 틀렸다고 나온다 ...ㅎ 그래서 다시 코드를 짰다.
N = int(input())
a = list(map(int,input().split()))
m = max(a)
sum = 0
for i in range(N):
a[i]= a[i]/m*100
sum += a[i]
print(sum/N)
👽해설👽
- 다 더해준 값을 입력받은 과목의 수값 N만큼 나눠주면 조작한 점수들의 평균이 나온다..
https://www.acmicpc.net/problem/8958
OX퀴즈 출처다국어
한국어
시간 제한메모리 제한제출정답맞은 사람정답 비율
1 초 | 128 MB | 96457 | 48330 | 40961 | 51.042% |
문제
"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다.
"OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.
OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다. 문자열은 O와 X만으로 이루어져 있다.
출력
각 테스트 케이스마다 점수를 출력한다.
예제 입력 1 복사
5
OOXXOXXOOO
OOXXOOXXOO
OXOXOXOXOXOXOX
OOOOOOOOOO
OOOOXOOOOXOOOOX
예제 출력 1 복사
10 9 7 55 30
T =int(input())
for _ in range(T):
a = input()
result = 0 #최종 모두 더한 값 연속된 O와 리셋되어 1로 변환 O의 값을 모두 더한 값
cnt = 0 #연속적으로 값을 더해주고 초기화시킬 값
for i in range(len(a)):
if a[i] == "O":
cnt += 1 #중첩 된다면 계속해서 +1씩 해서
result += cnt #최종 값에 더해준다.
else:
cnt = 0 #만약 X가 오게 된다면 cnt값을 0으로 초기화해준다.
print(result)
https://www.acmicpc.net/problem/4344
평균은 넘겠지 출처다국어
한국어
시간 제한메모리 제한제출정답맞은 사람정답 비율
1 초 | 256 MB | 124574 | 45487 | 38529 | 37.111% |
문제
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
입력
첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
출력
각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.
예제 입력 1 복사
5
5 50 50 70 80 100
7 100 95 90 80 70 60 50
3 70 90 80
3 70 90 81
9 100 99 98 97 96 95 94 93 91
예제 출력 1 복사
40.000% 57.143% 33.333% 66.667% 55.556%
C = int(input()) #테스트 케이스의 개수
n =[]
for _ in range(C):
n = list(map(int,input().split()))
ave = sum(n[1:]) / n[0] #n[0]번째가 입력받은 학생의 수이기 때문에 이로 점수의 합(1번째 자리부터 학생시작)/n 해주면 평균이 나온다.
cnt =0
for i in n[1:]:
if i>ave:
cnt += 1 #평균이 넘는 학생의 수를 구하기 위함
print(str('%.3f' %round(cnt/n[0]*100,3)) +"%")
'문제풀이 > 백준(Boj) 문제풀이' 카테고리의 다른 글
백준 - 단계별로 풀기 7단계 파이썬 - (문자열 단계 11654번,11720번,10809번,2675번,1157번,1152번,2908번,5622번,2941번,1316번) (0) | 2021.07.14 |
---|---|
백준 - 단계별로 풀기 6단계 파이썬 (함수 단계 -15596번, 4673번,1065번) (0) | 2021.07.13 |
백준 - 단계별로 풀기 4단계 (while문 단계 -10952번,10951번,1110번) 파이썬 (0) | 2021.07.08 |
백준 - 단계별로 풀기 2단계 (if문 단계 - 1330번,9498번,2753번,14681번, 2884번) (0) | 2021.07.06 |
백준 - 단계별로 풀기 1단계 (입출력과 사친연산 단계) (0) | 2021.07.05 |