백준

    [Java] 백준 #1463 1로 만들기

    https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 정수 X에 사용할 수 있는 연산 세 가지를 적절히 사용해서 정수 N을 1로 만든다. X가 3으로 나누어 떨어지면, 3으로 나눈다. X가 2로 나누어 떨어지면, 2로 나눈다. 1을 뺀다. 연산 사용 횟수의 최솟값 구하기 💡 알고리즘 다이나믹 프로그래밍 💡 접근 RGB거리처럼 모든 케이스의 계산횟수가 동일한 문제가 아니므로, 배열만으로는 해결하기 어려울 것 같다. → 재귀함수를 작성하고, 전역변수를 통해 최솟값을 관리하자. 💡 코드 package DP; import java.io.BufferedReader; imp..

    [Java] 백준 #10825 국영수

    https://www.acmicpc.net/problem/10825 10825번: 국영수 첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 1 www.acmicpc.net 학생 N명의 국, 영, 수 점수 학생 성적 정렬하기 국어 점수 감소하는 순서 국어 점수 같으면 → 영어 점수 증가 국어, 영어 같으면 → 수학 점수 감소 모두 같으면 이름 사전순 증가 (모든 대문자는 소문자 앞에) 아스키 코드에서 대문자는 소문자보다 작으므로 사전순으로 앞에 온다. 💡 알고리즘 정렬 💡 접근 객체를 정렬하는 기준을 만들기 위해 자바에서 제공하는 Comparat..

    [Java] 백준 #1158 요세푸스 문제

    https://www.acmicpc.net/problem/1158 1158번: 요세푸스 문제 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) www.acmicpc.net 1번부터 N번까지 N명의 사람이 원을 이루며 앉아있음 양의정수 K → 순서대로 K번째 사람 제거 → N명이 제거될 때까지 (N, K) 요세푸스 순열 구하기 💡 알고리즘 자료구조, 큐 💡 접근 처음에 중간에 원소가 나가면 인덱스도 하나씩 줄어들어야 하겠구나 라는 잘못된 생각을 해서 큐를 생각해내지 못했다. (규칙만 추가하며 산으로 가던 코드) int idx = K - 1; LinkedList res = new LinkedList(); while(list.size() > 0){ res.add..

    [Java] 백준 #1780 종이의 개수

    https://www.acmicpc.net/problem/1780 1780번: 종이의 개수 N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1 중 하나가 저장되어 있다. 우리는 이 행렬을 다음과 같은 규칙에 따라 적절한 크기로 자르려고 한다. 만약 종이가 모두 같은 수 www.acmicpc.net N x N 행렬 종이 → 각각 -1, 0, 1 중 하나 저장 규칙에 따라 적절한 크기로 종이 자르기 종이가 모두 같은 수 → 그대로 사용 모두 같은 수 x → 같은 크기의 종이 9개로 자르고 각각의 잘린 종이에 대하여 1번 과정 반복 이와같이 종이를 잘랐을 때 -1, 0, 1로만 채워진 종이의 개수 각각 구하기 N은 3^k꼴, 1 ≤ N ≤ 3^7 💡 알고리즘 분할 정복, 재귀 💡 접근..

    [Python] 백준 #18111 마인크래프트

    18111번: 마인크래프트 (acmicpc.net) 18111번: 마인크래프트 팀 레드시프트는 대회 준비를 하다가 지루해져서 샌드박스 게임인 ‘마인크래프트’를 켰다. 마인크래프트는 1 × 1 × 1(세로, 가로, 높이) 크기의 블록들로 이루어진 3차원 세계에서 자유롭게 www.acmicpc.net 땅의 높이를 모두 동일하게 만드는 ‘땅 고르기’ 작업 세로N, 가로M 크기의 집터, 맨 왼쪽 위의 좌표 (0, 0) 좌표 (i, j)의 가장 위에 있는 블록 → 인벤토리 : 1초 인벤토리 → 좌표 (i, j)의 가장 위에 있는 블록 위에 놓음 : 2초 0 ≤ 땅의 높이 ≤ 256 땅을 고르는 데 걸리는 최소시간의 (시간, 높이) 출력 (높이가 가장 높은 답) 💡 알고리즘 구현, 브루트포스 알고리즘 💡 접근 처음..

    [Python] 백준 #1966 프린터 큐

    1966번: 프린터 큐 (acmicpc.net) 1966번: 프린터 큐 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 www.acmicpc.net 💡 알고리즘 자료구조, 큐 💡 접근방법 원소들을 Queue의 가장 뒤에 재배치하고, 가장 앞에 있는 원소는 pop해야한다. → 앞뒤로 pop, append가 자유로운 deque 사용 주어진 예시를 직접 그려보면, 두가지를 신경써서 구현해야 함을 알 수 있다. M번째 수가 몇 번째로 큰 중요도를 갖는가 → deque의 0번째 원소가 max인지 확인 M의 중요도와 같은 중요도가 있는가 → count변수로 해결 💡 코드 f..

    [Python] 백준 #11052 카드 구매하기

    11052번: 카드 구매하기 (acmicpc.net) 11052번: 카드 구매하기 첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000) www.acmicpc.net [알고리즘] DP [접근 방법] N개의 카드 팩이 있고, N개의 카드를 구매하는 상황. D[i] = 카드 i개를 구매하는 최대 비용, dp[k] = 카드 k개가 들어있는 카드팩의 가격 일 때, 카드 i개를 구매하는 최대 비용의 경우의 수는 D[1] + dp[i - 1] D[2] + dp[i - 1] D[3] + dp[i - 3] ... D[i] + dp[0] [코드] 1 2 3 4 5 6 7 8 9 10 11 N = ..

    [Python] 백준 #1932 정수 삼각형

    1932번: 정수 삼각형 (acmicpc.net) 1932번: 정수 삼각형 첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다. www.acmicpc.net [알고리즘] DP [접근 방법] 각 층의 양 끝에 있는 수 → 바로 위의 수와 그대로 더해진다 중간에 있는 수 → 바로 위의 두 수 중, 더 큰 수와 더해진다 → 이 방법으로 맨 아래층까지 더하면, n개의 경우의수가 구해지고(n = 층수) , 그 중 가장 큰 수를 출력한다. [코드] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 n = int(input()) D = [] for _ in range(n): D.append(list(map(int, input().split()..

    [Python] 백준 #1149 RGB거리

    1149번: RGB거리 (acmicpc.net) 1149번: RGB거리 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 www.acmicpc.net [알고리즘] DP [접근 방법] 1. 점화식 세우기 * i-1번째 집과 i번째 집의 관계 → 조건은 서로 다른 색 * 최소비용 구하기 →min으로 비교 2. 경우의수 생각 * i번째 집이 R, G, B인 경우 3가지 [코드] 1 2 3 4 5 6 7 8 9 10 11 12 13 N = int(input()) cost = [] for i in range(N) : cost.append(list(m..

    [Python] 백준 #1874 스택 수열

    1874번: 스택 수열 (acmicpc.net) 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 N = int(input()) #수열의 크기 N des = [] # 만들고자 하는 수열 des stack = [] # 원소들을 push, pop 리스트 new_des = [] # ..

    [Python] 백준 #1181 단어 정렬

    https://www.acmicpc.net/problem/1181 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net 1 2 3 4 5 6 7 8 N = int(input()) word_list = [] for i in range (N) : word = str(input()) if word not in word_list : word_list.append(word) word_list.sort(key = lambda x : (len(x), x)) print("\n".join(word_list)) cs la..

    [Python] 백준 #1085 직사각형에서 탈출

    https://www.acmicpc.net/problem/1085 1085번: 직사각형에서 탈출 한수는 지금 (x, y)에 있다. 직사각형의 왼쪽 아래 꼭짓점은 (0, 0)에 있고, 오른쪽 위 꼭짓점은 (w, h)에 있다. 직사각형의 경계선까지 가는 거리의 최솟값을 구하는 프로그램을 작성하시오. www.acmicpc.net 1 2 3 4 5 6 7 x, y, w, h = map(int, input().split()) dis_list = [] dis_list.append(w - x) dis_list.append(x) dis_list.append(h - y) dis_list.append(y) print(min(dis_list)) cs