[백준] 2839 설탕 배달 (feat.DP) (python 파이썬)
·
🧩 Problem Solving/[백준]
2839번: 설탕 배달 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그 www.acmicpc.net 설탕 N킬로그램을 주고 이걸 5킬로그램, 3킬로그램 봉지로 가장 적은 개수로 나누는 문제. 처음에는 수학으로 해결하려다가 "동전" 문제가 생각나서 DP로 해결했다. 아이디어 n킬로그램은 (n - 3) + 3 또는 (n - 5) + 5로 생각할 수 있다. 따라서 n킬로그램의 봉지 개수는 n - 3과 n - 5 킬로그램 봉지 개수 중 작은 거(min) + 1이 된다. 이 아이디어로 해결하려면 n - 3과 n - 5의 개수 정보를 저장해 뒀다가 재사용이 필요하다. 3 ~ n킬로..
[백준] 2447 별 찍기 - 10 (python 파이썬)
·
🧩 Problem Solving/[백준]
2447번: 별 찍기 - 10 재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 www.acmicpc.net 거의 1년 전에 풀었던 문제. 진짜 아무런 계기 없이 그냥 뜬금없이 다시 생각나서 풀어봤다. 다행히 해결 이 문제는 재귀의 특징을 잘 이해하면 해결할 수 있는 문제다. 괜찮은 문제인 거 같다. 꼭 풀고 나서 자신의 것으로 체화하자. 아이디어 사고를 풀어가는 거라 좀 추상적일 수 있다. 일단 첫 번째 N = 3인 경우는 다음과 같다. *** * * *** 그리고 N = 9인 경우는 다음과 같다. 여기서 패턴을 나눠보면 크게 A파트(빨간색..
[백준] 28018 시간이 겹칠까?(feat.imos법) (python 파이썬)
·
🧩 Problem Solving/[백준]
https://www.acmicpc.net/problem/28018 28018번: 시간이 겹칠까? 댓글을 달아준 학생 수 $N$이 주어진다. $(1\leq N\leq 100\,000)$ 다음 $N$개 줄에는 각 학생의 좌석 배정 시각 $S$와 종료 시각 $E$가 주어진다. $(1\leq S\leq E\leq 1\,000\,000)$ 다음 줄에는 특정한 시각의 개수 www.acmicpc.net 대회에서 해결 못하고 끝나고 해결한 문제. 처음 듣는 알고리즘이어서 신기했다.(누적합 알고리즘 같다) 아직도 모르는게 많은거 같다, 배움에는 끝이 없는 거 같다. 아이디어 문제를 보고 시간제한을 고려하지않으면 정말 쉬운 난이도다. 하지만 입력값이 크기 때문에 시간 고민을 해봐야 된다. 이 아이디어를 쉽게 말하면, 들..
[백준] 28303 자석 (+ 연속 구간의 최대 합) (python 파이썬)
·
🧩 Problem Solving/[백준]
https://www.acmicpc.net/problem/28303 28303번: 자석 예제 1의 경우 N극이 3번 칸에 놓이고 S극이 5번 칸에 놓이도록 자석을 설치할 때 1번 현상으로 $a_3=22$의 에너지가 충전되며, 2번 현상으로 $a_5=4$의 에너지가 소모되고, 3번 현상으로 $(5-3)\times 2=4$ www.acmicpc.net N의 최댓값이 500,000이다. 시간제한은 2초나 되지만, N**2 같은 건 절대 안 된다. 이런 걸 고려해서 처음에는 DP, 그리디, 누적 합, 투포인터 등등 생각했었는데 1시간 정도 아이디어도 안 나왔다. 결국 알고리즘 분류를 확인했다. 누적 합 인걸 확인하고 최대한 누적 합 알고리즘을 적용하려고 했다. 코드 작성 중간에 내가 원하는 로직을 구현하기 위해..
[백준] 28286 재채점을 기다리는 중 (python 파이썬)
·
🧩 Problem Solving/[백준]
https://www.acmicpc.net/problem/28286 28286번: 재채점을 기다리는 중 UCPC고등학교에 다니는 민규는 최근에 기말고사를 치게 되었다. 기말고사는 $N$문제로 이루어져 있고, 각 문제는 보기가 1 이상 5 이하의 정수로 이루어진 객관식 문제이다. 시간이 지나 학교에서 www.acmicpc.net 처음 문제를 읽었을 때는 시간을 어떻게 줄일까 고민했는데, 입력값이 매우 작다.(max(N) = 20, max(K) = 3) 무난한 문제. 백트래킹을 사용해서 최대 개수를 찾아준다. 아이디어 1. pull: 번호들을 왼쪽으로 당기는 기능. rotate를 써서 구현했다. for문으로 구현해도 된다. 2. push: 번호를 오른쪽으로 미는 기능. pull과 마찬가지로 rotate를 써..
[백준] 28298 더 흔한 타일 색칠 문제 (python 파이썬)
·
🧩 Problem Solving/[백준]
https://www.acmicpc.net/problem/28298 28298번: 더 흔한 타일 색칠 문제 첫째 줄에 세 정수 $N$, $M$, $K$가 공백으로 구분되어 주어진다. $(1\le N,M,K\le 500;$ $N,M$은 $K$의 배수이다$)$ 다음 $N$개의 줄에는 타일의 $i$행 색상 배치를 의미하는 길이 $M$의 문자열 $d_i$가 주어진다. www.acmicpc.net 시간 초과가 생긴 문제. 이번엔 입력값 제한을 보고 시간에 맞게 로직을 짰다고 생각했는데 시간초과가 발생했다. 로직을 조금 수정하니까 통과했다. 왜 그런지 생각해 보니 원인을 찾을 수 있었다. 중간에 리스트에서 개수가 가장 많은 요소를 출력하는 메서드가 필요했다. 많은 방법이 있지만 나는 코드를 간결하게 작성하고 싶어 ..
[백준] 28250 이브, 프시케 그리고 푸른 MEX의 아내 (python 파이썬)
·
🧩 Problem Solving/[백준]
https://www.acmicpc.net/problem/28250 28250번: 이브, 프시케 그리고 푸른 MEX의 아내 첫째 줄에 정수 $N$이 주어진다. ($2 \le N \le 200\,000$) 둘째 줄에 $N$개의 정수 $A_1, A_2, \dots, A_N$이 공백으로 구분되어 주어진다. ($0 \le A_i \le 100\,000$) www.acmicpc.net 문제 이름이 특이해서 풀어본 문제. 실2라고 얕잡아봤다가 끔찍한 결과가 나왔다. 실제 코테였다면 풀었을지 장담 못하겠다. 꼭 입력값 제한을 보면서 시간을 추측하는 습관을 들이자. 여담이지만 코테 환경을 상상하며 문제를 푸는 건 도움이 되는 거 같다. 아이디어 1. 이중 for문 실패 수식을 보고 무식하게 이중 for으로 구현했다가 ..
[백준] 28017 게임을 클리어하자 (python 파이썬)
·
🧩 Problem Solving/[백준]
https://www.acmicpc.net/problem/28017 28017번: 게임을 클리어하자 첫째 줄에 산지니가 게임을 몇 회차를 하는지 나타내는 수 $N$과 무기의 종류 $M$이 공백으로 구분되어 주어진다. $(2 \le N, M \le 500)$ 둘째 줄부터 $N$개의 줄에는 각 무기마다 게임을 클리어하는데 www.acmicpc.net 대회 초반에 삽집하다가 DP인걸 깨닫고 해결했다. pypy로 제출, 이후 python으로 다시 제출. 아이디어 1. 반복문 단순 반복문으로 작성했다 실패했다. 2. DP n회차의 각 무기마다 올 수 있는 시간을 저장하면 된다. 위 이미지처럼 이전 행에 있는 값 중 최솟값을 다음 행에 더해가며 업데이트하면 된다. 최종적으로 마지막 행의 최솟값을 출력하면 된다. 전..