본문 바로가기

코딩테스트/BOJ

(51)
[백준/파이썬] 2231번: 분해합 (Python) 문제 https://www.acmicpc.net/problem/2231 2231번: 분해합 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 www.acmicpc.net 풀이 - 브루트포스 알고리즘 1부터 시작해서 n까지의 분해합을 모두 구해서 n과 처음 같아질 때, 그 때가 가장 작은 생성자가 된다. 처음 문제를 풀 때, 반복문의 범위를 range(1, n)까지했더니 반례 1에서 걸려 오답처리가 됐다. 입력값이 한 자리 수 일때까지 생각해서 풀어야 한다. 코드 n = int(input()) for i in range(1,n+1)..
[백준/파이썬] 10816번: 숫자 카드 2 (Python) 문제 https://www.acmicpc.net/problem/10816 10816번: 숫자 카드 2 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10, www.acmicpc.net 풀이 - 자료구조, 이분탐색, 해시를 사용한 집합과 맵 상근이가 가지고 있는 숫자의 카드를 개수와 함께 딕셔너리에 담는다. 상근이가 가지고 있는 숫자 카드가 6 3 2 10 10 10 -10 -10 7 3 일 경우 딕셔너리에는 {6: 1, 3: 2, 2: 1, 10: 3, -10: 2, 7: 1} 로 담기게 된다. 주어진 숫자카드를 딕셔너리에서 key값을 찾..
[백준/파이썬] 11650번: 좌표 정렬하기 (Python) 문제 https://www.acmicpc.net/problem/11650 11650번: 좌표 정렬하기 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. www.acmicpc.net 풀이 - 정렬 리스트에 담아서 lambda표현식으로 정렬했다. 코드 arr = [] for _ in range(int(input())): arr.append(list(map(int, input().split()))) # arr[0]기준 오름차순 -> arr[1]기준 오름차순 arr.sort(key=lambda x: (x[0], x[1]))..
[백준/파이썬] 10814번: 나이순 정렬 (Python) 문제 https://www.acmicpc.net/problem/10814 10814번: 나이순 정렬 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 www.acmicpc.net 풀이 - 정렬 나이, 이름, 인덱스를 리스트에 담아서 lambda표현식으로 정렬했다. 처음에 나이를 문자열로 받아 정렬시켰더니 오답이었다. 나이는 숫자로 형변환 뒤 정렬시켜 주었다. 코드 arr = [] for i in range(int(input())): # 나이, 이름 str1 = list(map(str, input().split())) # 인덱스 str1.append(i) # [나이, 이름,..
[백준/파이썬] 1373번: 2진수 8진수 (Python) 문제 https://www.acmicpc.net/problem/1373 1373번: 2진수 8진수 첫째 줄에 2진수가 주어진다. 주어지는 수의 길이는 1,000,000을 넘지 않는다. www.acmicpc.net 풀이 - 수학, 문자열 - 숫자를 리스트에 역순으로 담은 뒤, 3자리씩 끊어서 계산했다. 코드 n = list(input()) cnt, num = 1,1 sumN = 0 result = '' arr = [] # 슬라이싱을 통한 역순 for i in n[::-1]: arr.append(i) for idx in range(len(arr)): sumN = sumN + (int(arr[idx]) * num) num = num*2 cnt = cnt + 1 if cnt > 3 or idx == len(ar..
[백준/파이썬] 10951번: A+B - 4 (Python) 문제 https://www.acmicpc.net/problem/10951 10951번: A+B - 4 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. www.acmicpc.net 풀이 - 수학, 구현 - 해당 문제는 입력 개수에 제한이 없다. 따라서 try ... except 으로 풀면 두 수가 입력되지 않는 경우에 반복문이 끝난다. 코드 while True: try: a, b = map(int, input().split()) print(a+b) except: break
[백준/자바] 2573번: 윤년 (Java) 문제 https://www.acmicpc.net/problem/2753 2753번: 윤년 연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오. 윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다. 예를 들어, 2012년은 4의 배수이면서 www.acmicpc.net 풀이 - 수학, 구현 코드 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int year = sc.nextInt(); if((year%4 == 0 && year%100 != 0) || (year%400 == 0..
[백준/파이썬] 1373번: 2진수 8진수 (Python) 문제 https://www.acmicpc.net/problem/1373 1373번: 2진수 8진수 첫째 줄에 2진수가 주어진다. 주어지는 수의 길이는 1,000,000을 넘지 않는다. www.acmicpc.net 풀이 - 문자열, 구현 - 문자열을 역순으로 구하고 3자리씩 끊어서 8진수로 변환했다. 코드 n = list(input()) cnt, num = 1,1 sumN = 0 result = '' arr = [] # 슬라이싱을 통한 역순 for i in n[::-1]: arr.append(i) for idx in range(len(arr)): sumN = sumN + (int(arr[idx]) * num) num = num*2 cnt = cnt + 1 if cnt > 3 or idx == len(arr..