개발 공부 115

[백준] 3052. 나머지

3052번: 나머지 각 수를 42로 나눈 나머지는 39, 40, 41, 0, 1, 2, 40, 41, 0, 1이다. 서로 다른 값은 6개가 있다. www.acmicpc.net 이 문제는 두 가지 방식으로 풀었다. 1) 파이썬의 중복을 허용하지 않는 집합인 set 자료형을 이용하는 방법 2) 숫자를 카운트할 수 있는 list를 만들어 +1씩 하는 방법(출제자의 의도는 이쪽이었을 듯) 1) set 자료형을 이용한 방법 # 3052 나머지 arr = set() for i in range(10): n = int(input()) % 42 arr.add(n) # 중복을 허용하지 않는 set을 만들어서, set의 length만 나중에 세주기. print(len(arr), end='') 2) List만 이용하는 방법 ..

[백준] 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()으로 ..

[백준] 2439. 별 찍기 - 2

2439번: 별 찍기 - 2 첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제 하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오. www.acmicpc.net 정답 # 2439 별 찍기 - 2 N = int(input()) for i in range(1, N+1): if i == N: print(' ' * (N-i) + '*' * i, end='') break print(' ' * (N-i) + '*' * i) 2년 전쯤인가, 이 문제랑 비슷한 문제를 맞닥뜨린 적이 있었는데(아마 가운데 정렬로 별 찍기였던 것 같다.) 그때는 어떻게 풀어야 할지 몰라 당황했던 기억이 있다. 싸피에서 공부를 한 지금 보니 너무나 쉬운 문제라, 스스로 많이 성장했다고 칭찬했다. +..

[백준] 2742 기찍 N, 11021 A+B-7, 2438 별 찍기 - 1

반복문 단계 1부터 N까지의 합을 구하는 문제. 물론 반복문 없이 풀 수도 있습니다. www.acmicpc.net 단계별 풀기 - 반복문 부분의 문제들이다. 정답 # 2742 기찍 N N = int(input()) for i in range(N, 0, -1): if i == 1: print(i, end='') break print(i) # 11021 A+B-7 import sys T = int(input()) for tc in range(1, T+1): n, m = map(int, sys.stdin.readline().rstrip().split()) print('Case #{}: {}'.format(tc, n+m)) # 2438 별 찍기 - 1 N = int(input()) for i in range(1..

[백준] 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이 빠른지 잘 몰랐다. 그래서 오늘..