문제풀이/백준(Boj) 문제풀이 188

[백준] -1343 (그리디, 구현)

https://www.acmicpc.net/problem/1343 1343번: 폴리오미노 첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다. www.acmicpc.net [풀이 방안] 1. 사전순으로 가장 앞서는 답을 출력하라는 출력 조건이 있기 때문에 해당 조건을 만족하기 위해서는 그리디 알고리즘을 사용해서 풀면 된다. - 간단하게 AAAA를 사용할 수 있는 경우를 모두 빼고 나머지 BB를 출력할지 말지를 결정해주면 된다. - XXXXXXXXXX 라고 있다면 AAAAAAAABB를 출력해줘야 가장 사전순으로 앞서는 답이 된다. - XXXX 라면 BBBB가 아닌 AAAA를 출력해야 가장 앞서는 순서를 출력할 수 있게 된다. - 이를 위해서 모두 AAAA로 덮을 수 있는..

[백준] - 10815. 숫자 카드

https://www.acmicpc.net/problem/10815 10815번: 숫자 카드 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10, www.acmicpc.net import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.ut..

쇠막대기

https://www.acmicpc.net/problem/10799 10799번: 쇠막대기 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저 www.acmicpc.net import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Stack; import java.util.StringTokenizer; public class Main { private static BufferedReader br = new BufferedReader(new ..

[stack][백준] - 2812. 크게 만들기(python)

# stack이 있나 확인하고 해당 값이 다음 값보다 크면 넣고 작으면 뺴고 n, k = map(int,input().split()) li = list(input()) stack = [] for i in li: while stack and stack[-1] 0: stack.pop() k -= 1 stack.append(i) if k > 0: print(''.join(stack[:-k])) else: print(''.join(stack)) [문제 해설] 1924를 예시로 생각해보자 해당 K를 충족하지 못한다면 해당 개수만큼 stack에서 뺀 숫자를 돌려주면 된다. 까다롭지 않은 조건이라 어렵지 않은 stack 문제이다.

[백준] - 1320. 베스트셀러(python)

n = int(input()) dic = {} MAX = 0 answer = "" for _ in range(n): s = input() if s not in dic: dic[s] = 0 dic[s] += 1 dic = sorted(dic.items()) dic = dict(dic) for k,v in dic.items(): if MAX < v: MAX = v answer = k print(answer) 같은 판매수라면 더 빠른 문자열이 출력되어야 한다는 조건을 만족하기 위해서 딕셔너리를 정렬한 뒤 다시 딕셔너리로 만들어 주었다. 딕셔너리를 정렬하게 되면 [('k', v), ...] 형식으로 변환되기 때문이다.(리스트 안에 튜플 형식) 정렬을 해준 뒤 작업을 진행하기 때문에 같은 값을 따로 비교하지 않아..

[백준] - 1463. 1로 만들기(python) / bottom up 방식

[오답] n = int(input()) dp = [0] * (n + 1) #base case dp[1] = 0 dp[2] = dp[3] = 0 for i in range(4, n+1): if i % 6 == 0: dp[i] = min(dp[i//2], dp[i//3])+1 elif i % 2 == 0: dp[i] = min(dp[i//2], dp[i-1])+1 elif i % 3== 0: dp[i] = min(dp[i//3], dp[i-1])+1 else: dp[i] = dp[i-1]+1 print(dp[n]) base case가 잘못된 경우로 n이 1일 때, 2나 3에 접근할 수 없어서 indexError를 뱉어내게 된다. 이 문제의 경우 풀리지 않아서 내가 작성한 정답을 백준 질문하기에 올려두고 다른..