알고리즘

    [백준 파이썬] # 18258 큐 2

    Silver IV # 18258 큐 2 링크 : https://www.acmicpc.net/problem/18258 18258번: 큐 2 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 2,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 풀이 import sys from collections import deque q = deque() N = int(sys.stdin.readline()) for i in range(N): order = sys.stdin.readline().split() if order[0] == 'push': q.append(order[1]..

    [백준 파이썬] # 2941 크로아티아 알파벳

    Silver V # 2941 크로아티아 알파벳 링크 : https://www.acmicpc.net/problem/2941 2941번: 크로아티아 알파벳 예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z= www.acmicpc.net 풀이 text = input() c = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z='] for i in c: text = text.replace(i, 'c') print(len(text)) 후기 너무 오랫동안 붙잡고 있었다. 시간 제한없이 잡고있다보니 하루종일 생각..

    [백준 파이썬] # 2869 달팽이는 올라가고 싶다

    2022.02.17 Bronze I # 2869 설탕배달 링크 : https://www.acmicpc.net/problem/2869 2869번: 달팽이는 올라가고 싶다 첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000) www.acmicpc.net 풀이 import math A, B, V = map(int, input().split()) v_1 = V-A # (마지막 날 - 1)일에 도달해야 하는 높이 dis = A-B # 하루동안 최종으로 이동하는 거리 print(math.ceil(v_1/dis)+1) 후기 math를 사용해도 되는지 잘 모르겠지만.. 목적지에 도착하기 하루 전날에 도달해야 하는 목표를 v_1이라 설정했다. 달팽이가..

    [백준 파이썬] # 2839 설탕 배달

    Bronze I # 2839 설탕배달 링크 : https://www.acmicpc.net/problem/2839 2839번: 설탕 배달 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그 www.acmicpc.net 풀이 N = int(input()) dp = [-1 for i in range(N+3)]\ dp[3] = 1 dp[5] = 1 for i in range(3, N+1): if dp[i-3] != -1 and dp[i-5] != -1: dp[i] = min(dp[i-3], dp[i-5]) + 1 elif dp[i-3] != -1: dp[i] = dp[i-3] + ..

    [백준 파이썬] # 1463 1로 만들기

    Siver III # 1463 가장 긴 증가하는 부분 수열 링크 : https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 풀이 N = int(input()) li = list(range(N+1)) dp = [0 for i in range(N+3)] dp[2] = 1 dp[3] = 1 for i in range(4, N+1): if i%3 == 0 and i%2 == 0: dp[i] = min(dp[i//3], dp[i//2], dp[i-1]) + 1 elif i%3 == 0: dp[i] = min(dp[i//3], dp[i-1]) + 1 elif i%2 == 0:..

    [백준 파이썬] # 11053 가장 긴 증가하는 부분 수열 (복습 필요)

    Siver II # 11053 가장 긴 증가하는 부분 수열 링크 : https://www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 풀이 N = int(input()) A = list(map(int, input().split())) dp = [1] * N for i in range(N): for j in range(i): if A[j] < A[i]: dp[i] = max(dp[j]+..

    [백준 파이썬] # 2292 벌집

    Bronze II # 2292 벌집 링크 : https://www.acmicpc.net/problem/2292 2292번: 벌집 위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌 www.acmicpc.net 풀이 N = int(input()) cnt = 1 an = [1, 2] while an[-1]

    [백준 파이썬] # 4153 직각삼각형

    Bronze III # 4153 직각삼각형 링크 : https://www.acmicpc.net/problem/4513 4513번: The Neptune Adventure For each data set in the input, print a single line with the shortest amount of time in minutes it takes to reach the location of the rescue team from your starting location without drowning (if possible). If it is not possible to reach the location of the www.acmicpc.net 풀이 while True: li = list(map(i..

    [백준 파이썬] # 5622 다이얼

    Bronze II # 5622 다이얼 링크 : https://www.acmicpc.net/problem/5622 5622번: 다이얼 첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다. www.acmicpc.net 풀이 word = list(input()) dial = [[],[],['A','B','C'],['D','E','F'],['G','H','I'],['J','K','L'],['M','N','O'],['P','Q','R','S'],['T','U','V'],['W','X','Y','Z']] s = 0 for i in word: for j in dial: if i in j: s += dial.index(j) print(s+len(word)) 후..

    [백준 파이썬] # 2480 주사위 세개

    Bronze IV # 2480 주사위 세개 링크 : https://www.acmicpc.net/problem/2480 2480번: 주사위 세개 1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다. 같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다. 같은 눈이 2개 www.acmicpc.net 풀이 a, b, c = map(int, input().split()) li = [0 for i in range(7)] # 6+1(0을 포함해야 하므로) li[a] += 1 li[b] += 1 li[c] += 1 if max(li) == 3: print(10000+(li.index(max(li))*1000)) elif max(li) ..