백준 48

[백준] 4344. 평균은 넘겠지

4344번: 평균은 넘겠지 대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다. www.acmicpc.net 이 문제에서 배운 것은 round() 함수가 소수점이 0일 경우에는 자릿수만큼 출력을 안해주고, 그냥 생략해버린다는 것이다. 그래서 특정 소수점 자리수만큼 출력하고 싶다면 {:.3f} 이런 식으로 .format() 함수의 변수 위치에 자릿수를 표기해주는 것이 좋다. 그러면 소수점 뒷 자리가 모두 0이더라도 적어둔 숫자만큼 자릿수를 표기한다. # 4344 평균은 넘겠지 C = int(input()) for tc in range(1, C+1): # 우선 들어오는 숫자들을 리스트로 저장. arr = list(map(int, input().spl..

[백준] 8958. OX퀴즈

8958번: OX퀴즈 "OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수 www.acmicpc.net # 8958 OX 퀴즈 # O가 연속된 수가 많을수록 점수가 높아져 더해진다. # O를 카운트하는 수를 만들어 점수로 더해주고, X를 만나면 0으로 초기화 시키자! import sys T = int(input()) for tc in range(1, T+1): cnt = score = 0 arr = sys.stdin.readline().rstrip() for ch in arr: if ch == 'O': cnt += 1 score += cnt e..

[백준] 1546. 평균

1546번: 평균 첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보 www.acmicpc.net # 1546 평균 N = int(input()) arr = list(map(int, input().split())) sum = 0 max_num = max(arr) for n in arr: sum += (n / max_num * 100) print(sum / N) 최댓값을 구하는 데에는 파이썬 내장함수인 max 함수를 사용해서 풀었다. 반복문을 처음부터 다 돌면서 찾는 걸 구현해도, max를 쓰는 것과 시간과 메모리는 동일하게 들 것 같아서...;;

[백준] 2577. 숫자의 개수

2577번: 숫자의 개수 첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 크거나 같고, 1,000보다 작은 자연수이다. www.acmicpc.net # 2577 숫자의 개수 # 문자열로 푸는 것이 더 쉬워보여 곱셈의 결과를 문자열로 치환해 풀었다. arr = [] numbers = [0 for _ in range(10)] for i in range(3): arr.append(int(input())) A, B, C = arr[0], arr[1], arr[2] multiply = str(A * B * C) for num in multiply: numbers[int(num)] += 1 for i in range(10): if i == 9: print(numbers[i..

[백준] 2562. 최댓값

2562번: 최댓값 9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오. 예를 들어, 서로 다른 9개의 자연수 3, 29, 38, 12, 57, 74, 40, 85, 61 이 주어 www.acmicpc.net 제출코드: # 2562 최댓값 arr = [] max_num = 0 max_idx = 0 for i in range(9): n = int(input()) if n > max_num: max_num = n max_idx = i+1 print('{}\n{}'.format(max_num, max_idx)) 리스트에 안 넣고 푸는 방법도 있겠지만(max_num 잡아두고, while 문 돌리며 비교하고, EOFError 발생했을 때 최댓값..

[백준] 10818. 최소, 최대(476ms)

1110번: 더하기 사이클 0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, www.acmicpc.net # 10818 최소, 최대 import sys N = int(input()) arr = list(map(int, sys.stdin.readline().rstrip().split())) # 처음부터 다 찾는 방법(476ms) min_num = 10000001 max_num = -2000000 for i in arr: if i > max_num: max_num = i if i < min_num: min_num = i print('{} {}'.forma..

[백준] 1110. 더하기 사이클

1110번: 더하기 사이클 0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, www.acmicpc.net # 1110 더하기 사이클 def cycle(N) : A = N // 10 B = N % 10 new_N = ((B % 10) * 10) + ((A + B) % 10) return new_N origin = int(input()) num = origin count = 0 while True: ret = cycle(num) count += 1 if ret == origin: print(count) break else: num = ret 입력값 중 뒤..

[백준] 10952 A+B - 5, # 10951 A+B - 4

반복문 단계 1부터 N까지의 합을 구하는 문제. 물론 반복문 없이 풀 수도 있습니다. www.acmicpc.net # 10952 A+B - 5 while True: N, M = map(int, input().split()) if N + M != 0: print(N + M) else: break # 10951 A+B - 4 while True: try : N, M = map(int, input().split()) print(N+M) except EOFError: break 10951번은 try-except 문을 활용해 EOFError(파일의 끝에 와서 더 이상 입력 값이 없어, 명령문을 실행시킬 수 없는 상태)일 경우 무한 루프 while 문이 종료되도록 설정했다. 물론 EOFError을 안붙이고 그냥 e..

[백준] 10871. X보다 작은 수

10871번: X보다 작은 수 첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000) 둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. 주어지는 정수는 모두 1보다 크거나 같고, 10,000보다 작거나 같은 정수이다. www.acmicpc.net # 10871 X보다 작은 수 import sys N, X = map(int, sys.stdin.readline().rstrip().split()) arr = list(map(int, sys.stdin.readline().rstrip().split())) for i in arr: if i < X: print(i, end=' ') 평소에 input().split()으로 받던 걸 sys.stdin.readline().rstrip().split()으로 ..

[백준] 15552. 빠른 A+B

15552번: 빠른 A+B 첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다. www.acmicpc.net 정답 # 15552 빠른 A+B import sys T = int(input()) for tc in range(1, T+1): a, b = map(int, sys.stdin.readline().rstrip().split()) print(a+b) sys를 사용해 많은 양의 입력을 빠르게 받는 방법이다. 사실 이제껏 sys.stdin = open('input.txt', 'r') 이런 식으로 테스트케이스를 받을 때 사용했는데, 정작 왜 sys.stdin이 빠른지 잘 몰랐다. 그래서 오늘..