백준

    [백준 10989번-파이썬/Python] 수 정렬하기 3

    http://acmicpc.net/problem/10989 {코드} import sys def input(): return int(sys.stdin.readline()) def print(v): sys.stdout.write(str(v)+'\n') data = [0]*10001 for _ in range(input()): data[input()] += 1 for i in range(1, 10001): if data[i]: for _ in range(data[i]): print(i) {설명} 이 문제는 주어지는 수의 개수가 너무 많기 때문에 O(nlogn)으로도 시간 초과가 나게 됩니다. 그러나 수의 범위가 1에서 10000이므로 계수 정렬을 사용할 수 있습니다. 계수 정렬은 범위가 양의 정수일때 최댓값까..

    [백준 2751번-파이썬/Python] 수 정렬하기 2

    http://acmicpc.net/problem/2751 {코드} import sys [sys.stdout.write(str(v)+'\n') for v in sorted([int(sys.stdin.readline()) for _ in range(int(sys.stdin.readline()))])] {설명} 이 문제는 O(nlogn)의 복잡도를 요구하기 때문에 파이썬의 기본 내장 정렬 함수를 사용할 수 있습니다. 다만, 입력 횟수가 많고 숫자의 길이도 짧지 않아 sys 라이브러리의 입출력을 사용하면 Python3로 통과할 수 있습니다. {코드} import sys def input(): return int(sys.stdin.readline()) def print(v): sys.stdout.write(str..

    [백준 2750번-파이썬/Python] 수 정렬하기

    http://acmicpc.net/problem/2750 {코드} data = [int(input()) for _ in range(int(input()))] for i in range(len(data)): for j in range(len(data)-i-1): if data[j] > data[j+1]: data[j], data[j+1] = data[j+1], data[j] [print(v) for v in data] {설명} 버블 정렬의 코드로 0번째부터 n-1번째까지 n번 돌며 바로 오른쪽에 있는 값과 비교해 더 큰 값을 뒤로 옮깁니다. *코딩하는 거니님의 버블 소트 영상을 참고하세요! {코드} data = [int(input()) for _ in range(int(input()))] for i in ..

    [백준 1436번-파이썬/Python] 영화감독 숌

    http://acmicpc.net/problem/1436 {코드} n = int(input()) i = 665 while True: i += 1 if '666' in str(i): n -= 1 if not n: print(i) break {설명} 첫 번째 종말의 수는 666이므로 666부터 1씩 증가하며 666이 들어간 수이면 n을 1 감소시켜 n이 0이 될 때의 종말의 수를 출력하면 된다.

    [백준 1018번-파이썬/Python] 체스판 다시 칠하기

    http://acmicpc.net/problem/1018 {코드} n, m = map(int, input().split()) data = [input() for _ in range(n)] ans = 65 for x in range(n-7): for y in range(m-7): b = 0 # 검은색으로 시작 w = 0 # 흰색으로 시작 # 의미상 인덱스의 합이 짝수일때를 시작으로 봄 for s in range(x, x+8): for e in range(y, y+8): if (s+e)%2: # 홀수 if data[s][e] != 'B': # 흰색 시작이면 홀수일때 검은색이어야 하는데 아니므로 w추가 w += 1 else: # 검은색 시작이면 홀수일때 흰색이어야 하는데 아니므로 b추가 b += 1 else:..

    [백준 7568번-파이썬/Python] 덩치

    http://acmicpc.net/problem/7568 {코드} n = int(input()) info = [tuple(map(int, input().split())) for _ in range(n)] for i in range(n): cnt = 1 for j in range(n): if i == j: continue if info[i][0] < info[j][0] and info[i][1] < info[j][1]: cnt += 1 print(cnt, end=' ') {설명} 덩치 등수는 자기보다 덩치가 큰 사람들의 수 + 1이므로 사람별로 키와 몸무게가 둘 다 크면 1을 증가시켜서 나온 결과를 출력합니다.

    [백준 2331번-파이썬/Python] 분해합

    http://acmicpc.net/problem/2331 {코드} def func(): n = int(input()) m = max(n - 9*len(str(n)),0) for i in range(m, n): if n == sum(map(int, str(i)))+i: return i return 0 print(func()) {설명} 각 자릿수의 합을 구하기 위해 문자열의 각 인덱스마다 정수로 변환해서 그 합을 구한다. 거기에 기존의 수를 더한 결과가 타겟 수와 같으면 생성자 수이므로 이를 반환한다. 만약 반복문이 끝날 때까지 생성자를 찾지 못하면 0을 반환한다. 그리고 어떤 수에 대해서 생성자가 될 수 있는 최솟값은 n에서 9*(자릿수의 개수)를 뺀 값인데 0 이상이어야 하므로 0과 비교하여 더 큰 값부..

    [백준 2798번-파이썬/Python] 블랙잭

    http://acmicpc.net/problem/2798 {코드} n, t = map(int, input().split()) data = tuple(map(int, input().split())) def blackjack(): ans = 0 for i in data[:-2]: for j in data[1:-1]: if i == j: continue for k in data[2:]: if j == k or i == k or i+j+k > t: continue if i+j+k == t: return t else: ans = max(ans, i+j+k) return ans print(blackjack()) {설명} 브루트 포스는 결국 모든 경우의 수를 전부 시도해보는 방법입니다. 그래서 3장의 카드를 고르기 ..

    [백준 11729번-파이썬/Python] 하노이의 탑 이동 순서

    http://acmicpc.net/problem/11729 {코드} x = int(input()) print(2**x-1) def hanoi(n, p1, p2, p3): if n == 1: print(p1, p3) else: hanoi(n-1, p1, p3, p2) print(p1, p3) hanoi(n-1, p2, p1, p3) hanoi(x, 1, 2, 3) {설명} 이 문제는 파이썬 클래스님의 하노이의 탑 알고리즘 영상과 JW MATHIDEA님의 하노이의 탑 일반항 포스트(왜 총 이동 횟수가 2**x+1인지)를 참고하시기 바랍니다. 간단하게 설명하자면 하노이의 탑 문제는 각 원반이 일정한 규칙에 따라 움직이며 n은 n번 원반이며 p1은 현재 기둥, p2는 보조 기둥, p3는 이동할 기둥입니다. 그리..

    [백준 2447번-파이썬/Python] 별 찍기 - 10

    http://acmicpc.net/problem/2447 {코드}n = int(input()) data = [['*']*n for _ in range(n)] def remove_stars(length, x, y): global data if length == 1: return for row in data[x-length+length//3: x-length//3]: row[y-length+length//3:y-length//3] = ' '*(length//3) for i in range(length//(length//3)): for j in range(length//(length//3)): remove_stars(length//3, x-i*length//3, y-j*length//3) remove_star..