Algorithm Study

    [백준 파이썬] # 11651 좌표 정렬하기 2

    Silver V # 11651 좌표 정렬하기 2 링크 : https://www.acmicpc.net/problem/11651 11651번: 좌표 정렬하기 2 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. www.acmicpc.net 풀이 N = int(input()) li = [] for i in range(N): x, y = map(int, input().split()) li.append([x, y]) li = sorted(li, key = lambda a: (a[1], a[0])) for i in li: pr..

    [백준 파이썬] # 10866 덱

    Silver IV # 10866 덱 링크 : https://www.acmicpc.net/problem/10866 10866번: 덱 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,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_front': q.appendleft(order..

    [백준 파이썬] # 1978 소수 찾기

    Silver IV # 1978 소수 찾기 링크 : https://www.acmicpc.net/problem/1978 1978번: 소수 찾기 첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다. www.acmicpc.net 풀이 N = int(input()) nums = list(map(int, input().split())) cnt = 0 for i in nums: check = True if i in [0, 1]: check = False for j in range(2, int(i**0.5)+1): if i%j == 0: check = False if check: cnt += 1 print(cnt) 후기 에라노스테네스의 체를 이용해..

    [백준 파이썬] # 1316 그룹단어 체커

    Silver V # 1316 그룹 단어 체커 링크 : https://www.acmicpc.net/problem/1316 1316번: 그룹 단어 체커 그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때 www.acmicpc.net 풀이 N = int(input()) cnt = N for i in range(N): word = input() for j in range(len(word)-1): if word[j] == word[j+1]: pass elif word[j] in word[j+1:]: cnt -= 1 break print(cnt) ..

    [백준 파이썬] # 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]+..