BOJ

BOJ

[백준/BOJ] python 2231번 분해합

언어: python 번호: 2331 제목: 분해합 등급: 실버 4 ​ ​ 풀이 과정: 분해합 N으로 자연수 M을 거꾸로 구할 수는 없다. 자연수 1부터 M까지의 분해합을 모두 구하면서 가장 작은 자연수를 찾아야 한다. 이때 1부터 M까지의 분해합을 차례대로 구하니까 처음 구한 자연수 M을 출력하면 된다. ​ ​ 코드: # 2231 n = int(input()) result = 0 for i in range(n+1): m = i + sum(list(map(int, str(i)))) if n == m: print(i) break if n == i: print(0) ​ 메모: 리스트의 자료형을 한 번에 바꿀 때도 map 함수를 사용한다.

BOJ

[백준/BOJ] python 1343번 폴리오미노

언어: python 번호: 1343 제목: 폴리오미노 등급: 실버 5 ​ 풀이 과정: 사전 순으로 가장 앞서는 답을 출력한다고 했으니 최대한 "AAAA"로 덮어야 한다. "XXXX"를 "AAAA"로 바꾸고, 남은 "XX"는 "BB"로 바꾼다. "X"의 개수가 홀수여서 남으면 폴리오미노로 덮을 수 없으니 -1을 출력한다. ​ ​ 코드: # 1343 s = input() s = s.replace("XXXX", "AAAA") s= s.replace("XX", "BB") if "X" in s: print(-1) else: print(s) ​ 메모: 처음에는 문자열의 수를 세서 for 문을 돌면서 바꾸려 했는데 잘 안돼서 함수를 찾아보다가 replace가 생각났다. 파이썬은 정말 안될 거 같은 걸 쉽게 해준다....

BOJ

[백준/BOJ] python 9506번 약수들의 합

언어: python 번호: 9506 제목: 약수들의 합 등급: 브론즈 1 ​ 풀이 과정: 숫자 n을 입력받아 -1일 경우에는 멈추고, 아니면 계속 입력을 받는다. n의 약수가 들어있는 리스트로 만들어 리스트의 합과 n이 같을 경우 약수들의 합으로 나타내어 출력하고, 아니면 n is NOT perfect.를 출력한다. n의 약수를 구할때 모든 약수로 n을 나누면 짝이 나온다. 예를 들어 18의 약수는 (2, 9), (3, 6)이 짝이라 할 수 있다. 따라서 1부터 sqrt(n)까지의 약수와 그 짝을 구하면 된다. ​ ​ 코드: # 9506 b while 1: lst = [] n = int(input()) if n == -1: break for i in range(2, int(n**0.5)+1): if n%..

BOJ

[백준/BOJ] python 8958번 OX퀴즈

언어: python 번호: 8958 제목: OX퀴즈 등급: 브론즈 2 ​ 풀이 과정: 테스트 케이스의 개수 t를 입력받는다. 각 테스트 케이스의 문자열은 O와 X만으로 이루어져 있으니 문자열을 'X'를 기준으로 자른다. 자른 문자열에 O가 n개씩 묶여있을때 1부터 n까지의 합의 점수를 얻는다. 즉 n(n+1)/2의 점수를 얻는다. 따라서 for문을 돌면서 자른 문자열의 길이(자른 문자열의 길이+1)/2의 합을 구해 출력한다. ​ ​ 코드:​ # 8958 n = int(input()) for _ in range(n): result = 0 s = input() for i in s.split('X'): result += len(i)*(len(i)+1)//2 print(result) ​ 메모: 파이썬의 내장 함..

BOJ

[백준/BOJ] python 1904번 01타일

언어: python 번호: 1904 제목: 01타일 등급: 실버 3 ​ 풀이: N=1 > 1 N=2 > 00, 11 N=3 > 100, 001, 111 N=4 > 0000, 0011, 1001, 1100, 1111 N=5 > 10000, 00100, 11100, 00001, 00111, 10011, 11001, 11111 N=i일때 N=i-1일 때와 N=i-2일때를 보면 규칙을 찾을 수 있다. N=i일때 N=i+1인 2진 수열을 만드려면, 앞에서 만든 2진 수열에 1을 붙이거나, 1을 떼고 00을 붙여야 한다. 이때 N-1인 수열의 뒤에 1을 붙이고, N-2인 수열 뒤에 00을 붙이면 중복 없이 새로운 2진 수열을 만들 수 있다. 길이가 N인 모든 2진 수열의 개수는 N번째 피보나치 수와 같다. ​ ​ ..

BOJ

[백준/BOJ] python 1010번 다리 놓기

언어: python 번호: 1010 제목: 다리 놓기 등급: 실버 5 ​ 풀이 과정: 테스트 케이스 t를 입력받아 for 문으로 출력을 t 번 반복한다. 강의 서쪽과 동쪽에 있는 사이트의 개수 n, m을 입력받는다. n 개와 m 개의 점을 연결하는 것과 같으니 이는 조합이라 할 수 있다. 조합을 구하기 위해 math 함수를 이용할 수 있지만 나는 함수 없이 구현해 보았다. n과 m 이 같은 경우, n이 1인 경우로 나누어 계산했다. ​ ​ 코드: # 1010 t = int(input()) for i in range(t): result = 1 n, m = map(int, input().split()) if n==m: print(1) continue elif n==1: print(m) continue for..

BOJ

[백준/BOJ] python 7568번 덩치

언어: python 번호: 7568 제목: 덩치 등급: 실버 5 ​ 풀이 과정: 전체 사람의 수 n을 입력받고, n명의 등수를 나타내는 리스트인 result를 만든다. 각 사람의 몸무게와 키를 입력받아 2차원 리스트로 만든다. 덩치가 클수록 등수가 높으니, 덩치가 작을수록 등수의 숫자가 커진다. 따라서 2중 for문으로 비교해 덩치가 더 작을때 등수에 1을 더한다. 가장 큰 사람은 등수가 0이 되는데, 1등부터 등수를 매겨야하니 각 등수에 1씩 더한다. ​ ​ 코드: # 7568 l = [] result = [] n = int(input()) for i in range(n): result.append(0) for i in range(n): x, y = map(int, input().split()) l.a..

BOJ

[백준/BOJ] python 2798번 블랙잭

언어: python 번호: 2798 제목: 블랙잭 등급: 브론즈 2 ​ ​ 풀이 과정: 카드의 개수 n과 정수 m을 입력받는다. n장의 카드를 입력받으면서 리스트로 만든다. 3중 for문으로 돌면서 각 카드가 다른 경우에만 합을 구한다. 합이 max보다 크고, m보다 작으면 max에 할당한다. 이를 반복해 최댓값을 찾는다. ​ ​ 코드: # 2798 n, m = map(int, input().split()) num_list = list(map(int, input().split())) max = 0 num_sum = 0 for i in num_list: for j in num_list: for k in num_list: if i!=j and j!=k and i!=k: num_sum = i+j+k if ma..

kyj0015
'BOJ' 태그의 글 목록 (3 Page)