전체 글 29

[Python] 백준 1509 - 팰린드롬 분할

https://www.acmicpc.net/problem/1509문제세준이는 어떤 문자열을 팰린드롬으로 분할하려고 한다. 예를 들어, ABACABA를 팰린드롬으로 분할하면, {A, B, A, C, A, B, A}, {A, BACAB, A}, {ABA, C, ABA}, {ABACABA}등이 있다.분할의 개수의 최솟값을 출력하는 프로그램을 작성하시오.입력첫째 줄에 문자열이 주어진다. 이 문자열은 알파벳 대문자로만 이루어져 있고, 최대 길이는 2,500이다.출력첫째 줄에 팰린드롬 분할의 개수의 최솟값을 출력한다.풀이일차원 dp를 이용하는 O(n^3) 풀이는 생각하기 쉽다.다음은 그 코드를 적어놓은 것이다. S = input()N = len(S)dp = [0]*Ndef is_palindrome(s): if..

PS 2025.03.18

[Python] 백준 1182 - 부분수열의 합

https://www.acmicpc.net/problem/1182 문제N개의 정수로 이루어진 수열이 있을 때, 크기가 양수인 부분수열 중에서 그 수열의 원소를 다 더한 값이 S가 되는 경우의 수를 구하는 프로그램을 작성하시오.입력첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다.출력첫째 줄에 합이 S가 되는 부분수열의 개수를 출력한다.풀이비트마스킹을 배워보자. 사실 이번 문제에서 처음 써본다. ㄴㅇㄹㄴㅇ 태그중에 백트래킹이 있다. 원래같으면 모든 경우를 하나하나 있는지 없는지 조사하기 위해서 재귀함수 쓰고 난리부르스를 쳤을 것인데 ..

PS 2025.03.13

[Python] 백준 13913 - 숨바꼭질 4

https://www.acmicpc.net/problem/13913문제수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 1초 후에 2*X의 위치로 이동하게 된다.수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 구하는 프로그램을 작성하시오.입력첫 번째 줄에 수빈이가 있는 위치 N과 동생이 있는 위치 K가 주어진다. N과 K는 정수이다.출력첫째 줄에 수빈이가 동생을 찾는 가장 빠른 시간을 출력한다.둘째..

PS 2025.03.11

[Python] 백준 17425 - 약수의 합

https://www.acmicpc.net/problem/17425 문제두 자연수 A와 B가 있을 때, A = BC를 만족하는 자연수 C를 A의 약수라고 한다. 예를 들어, 2의 약수는 1, 2가 있고, 24의 약수는 1, 2, 3, 4, 6, 8, 12, 24가 있다. 자연수 A의 약수의 합은 A의 모든 약수를 더한 값이고, f(A)로 표현한다. x보다 작거나 같은 모든 자연수 y의 f(y)값을 더한 값은 g(x)로 표현한다.자연수 N이 주어졌을 때, g(N)을 구해보자.입력첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 100,000)가 주어진다. 둘째 줄부터 테스트 케이스가 한 줄에 하나씩 주어지며 자연수 N(1 ≤ N ≤ 1,000,000)이 주어진다.출력각각의 테스트 케이스마다, 한 줄에 하나..

PS 2025.03.10

[Python] 백준 17484 - 진우의 달 여행 (Small)

https://www.acmicpc.net/problem/17484 문제우주비행이 꿈이였던 진우는 음식점 '매일매일싱싱'에서 열심히 일한 결과 달 여행에 필요한 자금을 모두 마련하였다! 지구와 우주사이는 N X M 행렬로 나타낼 수 있으며 각 원소의 값은 우주선이 그 공간을 지날 때 소모되는 연료의 양이다.진우는 여행경비를 아끼기 위해 조금 특이한 우주선을 선택하였다. 진우가 선택한 우주선의 특징은 아래와 같다.1. 지구 -> 달로 가는 경우 우주선이 움직일 수 있는 방향은 아래와 같다.2. 우주선은 전에 움직인 방향으로 움직일 수 없다. 즉, 같은 방향으로 두번 연속으로 움직일 수 없다.진우의 목표는 연료를 최대한 아끼며 지구의 어느위치에서든 출발하여 달의 어느위치든 착륙하는 것이다.최대한 돈을 아끼고..

PS 2025.03.09

PS를 '또' 다시 시작하게 된 계기

아롱이입니다 이제 고3이네요작년 겨울 이후로 대학입시 수학공부를 하느라 PS를 약 4달간 못했습니다 새학기가 시작되고 학교에 들어갔는데면학시간에는 하루종일 수학공부를 하고 쉬는쉬간에 다른친구들은 전부 게임하고 인스타하고 그러는데 저는 할 게 없어서 가만히 멍을 때렸습니다 쉬는시간에는 쉬어야죠???!?해서 저는 쉬는시간에 PS를 하기로 했습니다  어쨌든 학교측에서 정올하고 NYPC는 자유롭게 나가도 된다고 허락을 해줘서 주말에 집에서 오랜만에 백준을 들어가서 마라톤을 뛰어봤는데요 세상에 실버3문제를 푸는데 1시간이 걸리는 것 아니겠습니까?? 아 다 까먹었구나 다시 시작하겠습니다

PS 2025.03.09

[Python] 백준 16566 - 카드 게임

https://www.acmicpc.net/problem/16566문제철수와 민수는 카드 게임을 즐겨한다. 이 카드 게임의 규칙은 다음과 같다.N개의 빨간색 카드가 있다. 각각의 카드는 순서대로 1부터 N까지 번호가 매겨져 있다. 이 중에서 M개의 카드를 고른다.N개의 파란색 카드가 있다. 각각의 카드는 순서대로 1부터 N까지 번호가 매겨져 있다. 이 중에서 빨간색에서 고른 번호와 같은 파란색 카드 M개를 고른다.철수는 빨간색 카드를 가지고 민수는 파란색 카드를 가진다.철수와 민수는 고른 카드 중에 1장을 뒤집어진 상태로 낸다. 그리고 카드를 다시 뒤집어서 번호가 큰 사람이 이긴다. 이 동작을 K번 해서 더 많이 이긴 사람이 최종적으로 승리한다. 한 번 낸 카드는 반드시 버려야 한다.철수는 뛰어난 마술사..

PS 2024.11.29

[Python] 백준 27172 - 수 나누기 게임

https://www.acmicpc.net/problem/27172문제《보드게임컵》을 준비하다 지친 은하는 보드게임컵 참가자들을 경기장에 몰아넣고 결투를 시키는 게임 《수 나누기 게임》을 만들었습니다.《수 나누기 게임》의 규칙은 다음과 같습니다.게임을 시작하기 전 각 플레이어는 1부터 1000000 사이의 수가 적힌 서로 다른 카드를 잘 섞은 뒤 한 장씩 나눠 가집니다.매 턴마다 플레이어는 다른 플레이어와 한 번씩 결투를 합니다.결투는 서로의 카드를 보여주는 방식으로 진행되며, 플레이어의 카드에 적힌 수로 다른 플레이어의 카드에 적힌 수를 나눴을 때, 나머지가 0$0$이면 승리합니다. 플레이어의 카드에 적힌 수가 다른 플레이어의 카드에 적힌 수로 나누어 떨어지면 패배합니다. 둘 다 아니라면 무승부입니다...

PS 2024.11.06

[Python] 백준 16946 - 벽 부수고 이동하기 4

https://www.acmicpc.net/problem/16946문제N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 한 칸에서 다른 칸으로 이동하려면, 두 칸이 인접해야 한다. 두 칸이 변을 공유할 때, 인접하다고 한다.각각의 벽에 대해서 다음을 구해보려고 한다.벽을 부수고 이동할 수 있는 곳으로 변경한다.그 위치에서 이동할 수 있는 칸의 개수를 세어본다.한 칸에서 이동할 수 있는 칸은 상하좌우로 인접한 칸이다.입력첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 1,000)이 주어진다. 다음 N개의 줄에 M개의 숫자로 맵이 주어진다.출력맵의 형태로 정답을 출력한다. 원래 빈 칸인 곳은 0을 출력하고, 벽인 곳..

PS 2024.10.29