본문 바로가기

코딩테스트/BOJ

(51)
[백준/파이썬] 4673번: 셀프 넘버 (Python) 문제 www.acmicpc.net/problem/4673 4673번: 셀프 넘버 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, www.acmicpc.net 풀이 - 구현 - 1부터 10000까지 리스트에 담고, n과 n의 각 자리수의 합이 10000보다 작고, 리스트 안에 존재하는 숫자라면 리스트에서 제외시켜준다. 해당 리스트에는 셀프넘버만 존재하게 된다 코드 arr = [ i for i in range(1,10001)] # 1부터 10000까지 list에 담기 for i in range(1,10001): n..
[백준/파이썬] 1152번: 단어의 개수 (Python) 문제 www.acmicpc.net/problem/1152 1152번: 단어의 개수 첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 www.acmicpc.net 풀이 - 구현, 문자열 - input().split()하면 빈칸을 기준으로 리스트 형식으로 담긴다 코드 n = len(input().split()) print(n)
[백준/파이썬] 1316번: 그룹 단어 체커 (Python) 문제 www.acmicpc.net/problem/1316 1316번: 그룹 단어 체커 그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때 www.acmicpc.net 풀이 - 구현 알고리즘 - 문자열의 각 문자를 새로운 리스트에 존재하지 않는 경우 리스트에 담는다. - 새로운 리스트에 단어가 존재하고 해당 단어가 연속하지 않은 경우는 그룹단어가 아니다. 예를들어, happy는 ['h', 'a', 'p', 'y']가 새로운 리스트에 담긴다. 단 'p'는 연속되어있기 때문에 그룹단어이다 코드 n = int(input()) a = [] cnt..
[백준/파이썬] 1145번: 적어도 대부분의 배수 (Python) 문제 www.acmicpc.net/problem/1145 1145번: 적어도 대부분의 배수 첫째 줄에 다섯 개의 자연수가 주어진다. 100보다 작거나 같은 자연수이고, 서로 다른 수이다. www.acmicpc.net 풀이 - 브루트포스 알고리즘 - 처음 무슨 문제인지 이해를 못했다. 주어진 다섯 개의 자연수 중 최소 3개로 나누어 떨어지는 숫자 중 최소값을 구하는 문제이다. - 210은 30의 배수, 42의 배수, 70의 배수이다. - 1부터 시작 할 필요없이 5개의 숫자중에서 가장 작은 숫자부터 1씩 증가시켜, 주어진 다섯 개의 수로 나누어 떨어지면 cnt를 증가시켜준다 - cnt가 3이상이되면 해당 숫자가 정답이 된다. 코드 arr = list(map(int, input().split())) minN..
[백준/파이썬] 2851번: 슈퍼 마리오 (Python) 문제 www.acmicpc.net/problem/2851 2851번: 슈퍼 마리오 첫째 줄에 마리오가 받는 점수를 출력한다. 만약 100에 가까운 수가 2개라면 (예: 98, 102) 마리오는 큰 값을 선택한다. www.acmicpc.net 풀이 - 브루트포스, 완전탐색문제 - 키의 합과 100의 차이값이 가장 작은 값을 구하면 된다 코드 arr = [] for i in range(10): arr.append(int(input())) arr2 = arr.copy() for i in range(1,10): arr2[i] += arr2[i-1] minNum, minNumIdx = 100, 0 for j in range(10): if abs(arr2[j] - 100)
[백준/파이썬] 1110번: 더하기 사이클 (Python) 문제 www.acmicpc.net/problem/1110 1110번: 더하기 사이클 0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, www.acmicpc.net 풀이 - 브루트 포스, 완전탐색, 재귀 - 기존 숫자의 오른쪽과 합한 숫자의 오른쪽을 더하고, 그 합이 n과 같아질 때까지 재귀함수 반복 코드 n = int(input()) narr = list(map(int, str(n))) # 숫자를 리스트로 cnt = 0 def cycle(narr, n, cnt): result = list(map(int, str(sum(narr)))) hap = nar..
[백준/파이썬] 7568번: 덩치 (Python) 문제 www.acmicpc.net/problem/7568 7568번: 덩치 우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩 www.acmicpc.net 풀이 - 구현, 브루트 포스 알고리즘 - 2중 for문을 이용해 자신보다 키와 몸무게가 모두 클 경우 등수를 증가해 준다 코드 n = int(input()) arr = [[0]*2 for i in range(n)] for i in range(n): x, y = map(int, input().split()) arr[i][0] = x arr[i][1] = y for i in range(0,n): ..
[백준/파이썬] 1969번: DNA (Python) 문제 www.acmicpc.net/problem/1969 1969번: DNA DNA란 어떤 유전물질을 구성하는 분자이다. 이 DNA는 서로 다른 4가지의 뉴클레오티드로 이루어져 있다(Adenine, Thymine, Guanine, Cytosine). 우리는 어떤 DNA의 물질을 표현할 때, 이 DNA를 이루는 뉴클레오 www.acmicpc.net 풀이 - 브루트포스, 그리디 알고리즘 - 맨 처음 문제 자체를 이해하기가 매우 어려웠다. 그래서 검색을 통해 문제 풀이를 찾아보니 다음과 같이 이해하면 되는 문제였다. 코드 n, m = map(int, input().split()) arr = [] # 문자열을 list형식으로 담아준다 for i in range(n): arr.append(list(map(str,..