개발 공부/알고리즘 문제풀이 56

[백준] 15596. 정수 n개의 합

15596번: 정수 N개의 합 C++17, Java 8, Python 3, C11, PyPy3, C99, C++98, C++11, C++14, Go, C99 (Clang), C++98 (Clang), C++11 (Clang), C++14 (Clang), C11 (Clang), C++17 (Clang) www.acmicpc.net 처음에 문제만 보고, return 값을 출력해줘야 하는 줄 알고 함수 말고 출력하는 식도 코딩했는데 나중에 확인해보니 제출하기를 눌러서 사전에 작성된 함수 포맷만 채우면 되는 것이었다...! n개 정수의 합을 구하는 방법을 나는 간단하게 ans에 계속 더해주는 식으로 함수를 구현했다. 비교적 간단했던 문제. (내가 삽질만 안 했더라면 말이다..) # 15596 정수 n개의 합 d..

[백준] 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를 쓰는 것과 시간과 메모리는 동일하게 들 것 같아서...;;

[백준] 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..