본문 바로가기

전체 글17

[Python] 백준 2346번 (풍선 터뜨리기) [실버3] https://www.acmicpc.net/problem/2346풍선이 원형으로 놓여 있으니까 숫자를 양쪽에서 빼거나 넣을 수 있어야 하므로 deque를 써야한다. 처음에 이 문제를 deque의 append와 pop으로만 풀려고 했는데 코드가 너무 복잡해졌다.. deque에 대해서 조금 더 알아보니까 rotate()라는 메서드가 존재한다는 것을 깨달았다. rotate(3)이라면 deque의 오른쪽에서 값을 뺀 뒤 왼쪽으로 넣는걸 3번 반복한다. 반대로 rotate(-3)이라면 deque의 왼쪽에서 값을 뺀 뒤 오른쪽으로 넣는걸 3번 반복한다. rotate()메서드를 알고 나니 코드가 엄청 간결해졌다. 정답import sysfrom collections import dequeN = int(sys.stdin.. 2025. 2. 27.
[Python] 백준 13909번 (창문 닫기) [실버5] https://www.acmicpc.net/problem/13909N의 범위가 21억이고 시간 제한이 1초라서 시뮬레이션으로 풀면 무조건 시간 초과가 뜰 것 같다. 하지만 문제만 읽고서는 한 눈에 규칙이 보이지 않아 처음에는 나이브하게 N을 하나씩 늘려갔다.# 1# 1# 1 0# 1 2# 1 0 0# 1 2 3# 1 0 0 1# 1 2 3 4# 1 0 0 1 0# 1 2 3 4 5# 1 0 0 1 0 0# 1 2 3 4 5 6# 1 0 0 1 0 0 0# 1 2 3 4 5 6 7# 1 0 0 1 0 0 0 0# 1 2 3 4 5 6 7 8# 1 0 0 1 0 0 0 0 1# 1 2 3 4 5 6 7 8 9뭔가 규칙이 보이긴 한 것 같다. 해당 창문의 번호가 어떤 수의 제곱수이면 창문이 열려 있는 것 같다.. 2025. 2. 25.
[Java] 백준 1012번 (유기농 배추) [실버2] https://www.acmicpc.net/problem/1012이 문제로 그래프 탐색을 처음 접했는데 처음에는 어떻게 접근해야 할지 몰라서 풀지 못했다.. 코딩 초보인 주제에 혼자서 풀어보겠다고 몇 시간씩 고민하며 생각했는데.. 1시간 정도 해보고 안되면 더 붙잡아선 안 될 것 같다. 요즘은 Chat-GPT가 있어서 막히는 문제가 생길때 문제 접근 방법을 물어볼 수 있어서 좋은 것 같다. 결국 다양한 유형의 문제를 많이 풀어보고 각 문제 유형별 정해진 접근법을 익히는게 중요한 것 같다. 물론 창의력과 사고력을 기르기 위해서는 혼자서 접근 방법을 찾아나가야 한다는 말도 맞지만, 그 말도 이미 유형별 기본적인 풀이 방법은 전부 알고 있는 플레티넘이나 다이아 이상이라는 전제에서나 맞는 말인 것 같다.. 이 .. 2025. 2. 24.
[Python] 백준 17103번 (골드바흐 파티션) [실버2] https://www.acmicpc.net/problem/17103N의 범위가 1000000까지 이므로 에라토스테네스의 체를 사용하면 될 것 같다. 정답import sysprime_list = [True for _ in range(1000001)]prime_list[0] = Falseprime_list[1] = Falsefor i in range(2, 1000001): if prime_list[i] == True: for j in range(i*2, 1000001, i): prime_list[j] = Falseprime_num = []for i in range(len(prime_list)): if prime_list[i] == True: prime_.. 2025. 2. 24.
[Java] 백준 1003번 (피보나치 함수) [실버3] https://www.acmicpc.net/problem/1003난 DP가 싫다. 하지만 이 문제는 DP로 풀어야 한다.. T의 범위가 어디까지인지 잘 모르겠지만 시간 제한이 0.25초이고 DP를 통해 값을 저장하지 않으면 재귀 호출에 의해 중복 계산이 생겨 최악의 경우 O(2^40) ≈ O(1,099,511,627,776)의 시간 복잡도가 발생한다. 따라서 DP 테이블을 만들어서 이전 숫자들의 0과 1의 출력 횟수 정보들을 저장해서 가져오는 방식으로 풀어야 할 것 같다. 정답import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { Buf.. 2025. 2. 23.
[Python] 백준 1001번 (A-B) [브론즈5] https://www.acmicpc.net/problem/1001이 문제는 1000번 문제에서 A+B를 A-B로만 바꾸면 되는 문제이다. 정답A, B = map(int,input().split())print(A-B) 풀이1. input().split()을 통해 입력값이 문자열 숫자 리스트로 만들어진다.['3', '2']  2. map 함수를 통해 리스트의 각 요소가 int 함수로 처리된다.int('3') = 3int('2') = 2 3. A와 B에 각각 3과 2가 대입된다.A, B = 3, 2 4. print(A-B)를 하면 1이 출력된다.print(A-B) # 1 2025. 2. 23.