개발 공부 115

[백준] 2675. 문자열 반복

2675번: 문자열 반복 문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다 www.acmicpc.net 파이썬 문자열에 +, -, * 같은 연산자가 사용 가능하다는 것만 안다면 어렵지 않게 풀 수 있는 문제였다. # 2675 문자열 반복 T = int(input()) for tc in range(1, T+1): num, word = input().split() num = int(num) P = '' for w in word: P += w * num print(P) P라는 문자열이 들어갈 변수를 생성하지 않고, 바로 반복문에서 그때그때 출력도 가능하다. 단..

[백준] 10809. 알파벳 찾기

10809번: 알파벳 찾기 각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출 www.acmicpc.net # 10809 알파벳 찾기 # 우선 알파벳 개수 만큼 -1을 채워 넣은 리스트를 만든다.(알파벳은 26개) # 이렇게 하면 -1이 아닌 숫자들은 자릿수가 채워진 것이고, 한번도 등장하지 않은 알파벳의 자리수는 -1로 남아있다. arr = [-1 for _ in range(26)] # 아스키 코드로 a는 97, z는 122이다. # 그래서 word를 반복문을 돌리며 해당 알파벳을 ord()를 사용해 아스키 숫자로 바꾼 후, # 거기서 97을 뺀 인덱스 ..

[백준] 11720. 숫자의 합

11720번: 숫자의 합 첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다. www.acmicpc.net # 11720 숫자의 합 N = int(input()) word = input() sum = 0 for i in word: sum += int(i) print(sum) 사용 언어가 파이썬이라 나는 잘 몰랐는데, java나 C로 푼 사람들의 해답을 보니 긴 문자열이 들어왔을 때 정수로 바꾸는 처리가 조금 까다로운 것 같다. 나중에 js로 알고리즘 풀게 되면 한번 확인해봐야 할 듯.

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