분류 전체보기 143

[백준] 11654. 아스키 코드

11654번: 아스키 코드 알파벳 소문자, 대문자, 숫자 0-9중 하나가 주어졌을 때, 주어진 글자의 아스키 코드값을 출력하는 프로그램을 작성하시오. www.acmicpc.net 이 문제는 파이썬 내장 함수를 알면 간단히 풀리는 문제이다. 파이썬에서 ASCII 코드를 숫자로 바꾸는 함수는 ord(), 역으로 숫자를 ASCII 코드로 바꾸는 함수는 chr()이다. # 11654 아스키 코드 # 파이썬에서 ASCII -> 숫자는 ord(), 숫자 -> ASCII는 chr() 함수를 사용한다! print(ord(input()))

[백준] 1065. 한수

1065번: 한수 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 www.acmicpc.net 이 문제는 등차수열에 대해 다시 복습하고 푸니까 훨씬 잘 풀렸다. 우선 나는 이 문제를 한수인지 판별하는 함수를 만들어 카운트를 세는 방법으로 구현했다. 문제의 '한수 판별 함수'의 경우 3가지 포인트에 유의하며 접근했다. 포인트 1. 숫자가 1개만 있는 것도 수열이 성립한다(예: 1, 2, 3, 4...8, 9). 'an = a1 + (n-1)d' 이 식에 n=1을 대입해보면 성립한다는 것을 확인할 수 있다. 포인트 2. 10

[백준] 4673. 셀프 넘버

4673번: 셀프 넘버 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, www.acmicpc.net '생성자가 없는 셀프 함수를 찾아라'가 문제였기 때문에, 1부터 10000까지 숫자 중 생성자가 있는 수를 찾아서 중복을 허용하지 않는 set 자료형에 넣어두고, 다시 반복문을 돌리며 1부터 10000까지 숫자 중 해당 set에 포함되지 않은 숫자를 찾는 방법으로 풀었다. 평소라면 자리수를 세기 위해 파이썬 내장 함수 str()을 이용해 숫자를 문자로 바꿔서 했을 테지만, 왠지 수학으로 접근해서 푸는 방법이 있을..

[백준] 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 발생했을 때 최댓값..