본문 바로가기

알고리즘 풀이/백준36

[Silver I] 카드 합체 놀이 - 15903 (Java) 문제 요약 석환이는 아기다. 아기 석환이는 자연수가 쓰여져있는 카드를 갖고 다양한 놀이를 하며 노는 것을 좋아한다. 오늘 아기 석환이는 무슨 놀이를 하고 있을까? 바로 카드 합체 놀이이다! 아기 석환이는 자연수가 쓰여진 카드를 n장 갖고 있다. 처음에 i번 카드엔 ai가 쓰여있다. 카드 합체 놀이는 이 카드들을 합체하며 노는 놀이이다. 카드 합체는 다음과 같은 과정으로 이루어진다. x번 카드와 y번 카드를 골라 그 두 장에 쓰여진 수를 더한 값을 계산한다. (x ≠ y) 계산한 값을 x번 카드와 y번 카드 두 장 모두에 덮어 쓴다. 이 카드 합체를 총 m번 하면 놀이가 끝난다. m번의 합체를 모두 끝낸 뒤, n장의 카드에 쓰여있는 수를 모두 더한 값이 이 놀이의 점수가 된다. 이 점수를 가장 작게 만드는.. 2023. 7. 11.
[Silver I] 지름길 - 1446 (Java) 문제 요약 매일 아침, 세준이는 학교에 가기 위해서 차를 타고 D킬로미터 길이의 고속도로를 지난다. 이 고속도로는 심각하게 커브가 많아서 정말 운전하기도 힘들다. 어느 날, 세준이는 이 고속도로에 지름길이 존재한다는 것을 알게 되었다. 모든 지름길은 일방통행이고, 고속도로를 역주행할 수는 없다. 세준이가 운전해야 하는 거리의 최솟값을 출력하시오. 문제 분석 지름길 객체를 만들어 시작, 끝, 길이를 저장해 준 뒤 이를 시작위치를 기준으로 정렬해 준다. 이후 DP배열을 만들고 이를 고속도로 기준으로 채워나가면서 지름길 적용이 가능하게 되면, 지름길을 적용해 준다. ex) 다음 예제의 경우 코드 import java.io.BufferedReader; import java.io.IOException; impor.. 2023. 7. 11.
[Gold IV] 공유기 설치 - 2110 (Java) 문제 요약 도현이의 집 N개가 수직선 위에 있다. 각각의 집의 좌표는 x1, ..., xN이고, 집 여러개가 같은 좌표를 가지는 일은 없다. 도현이는 언제 어디서나 와이파이를 즐기기 위해서 집에 공유기 C개를 설치하려고 한다. 최대한 많은 곳에서 와이파이를 사용하려고 하기 때문에, 한 집에는 공유기를 하나만 설치할 수 있고, 가장 인접한 두 공유기 사이의 거리를 가능한 크게 하여 설치하려고 한다. C개의 공유기를 N개의 집에 적당히 설치해서, 가장 인접한 두 공유기 사이의 거리를 최대로 하는 프로그램을 작성하시오. 문제 분석 첫집에 무조건 공유기를 설치한다 가정하고, 공유기 거리를 이분탐색을 통해 지속적으로 갱신하며 설치 가능한 공유기 개수를 카운트한다. N=6, C=4, map={0,3,4,7,9,10.. 2023. 7. 5.
[Gold V] A와 B 2 - 12919 (Java) 문제 요약 수빈이는 A와 B로만 이루어진 영어 단어 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수빈이는 간단한 게임을 만들기로 했다. 두 문자열 S와 T가 주어졌을 때, S를 T로 바꾸는 게임이다. 문자열을 바꿀 때는 다음과 같은 두 가지 연산만 가능하다. 문자열의 뒤에 A를 추가한다. 문자열의 뒤에 B를 추가하고 문자열을 뒤집는다. 주어진 조건을 이용해서 S를 T로 만들 수 있는지 없는지 알아내는 프로그램을 작성하시오. 문제 분석 T에서 S로 가는 역순 연산을 그대로 구현한다. 코드 import java.io.BufferedReader; import java.io.. 2023. 7. 5.
[Silver IV] 점화식 - 13699 (JAVA) 문제 요약 다음의 점화식에 의해 정의된 수열 t(n)을 생각하자: t(0)=1 t(n)=t(0)*t(n-1)+t(1)*t(n-2)+...+t(n-1)*t(0) 이 정의에 따르면, t(1)=t(0)*t(0)=1 t(2)=t(0)*t(1)+t(1)*t(0)=2 t(3)=t(0)*t(2)+t(1)*t(1)+t(2)*t(0)=5 ... 주어진 입력 0 ≤ n ≤ 35에 대하여 t(n)을 출력하는 프로그램을 작성하시오. 문제 분석 점화식 그대로 구현하며 dp를 사용한다. t(2)=t(0)*t(1)+t(1)*t(0)=2 이런 경우, 0과 1의 위치가 바뀐 같은 값을 연산한다는 것을 염두에 두고, 짝수와 홀수일 때를 나눠 계산해 준다. 코드 import java.io.BufferedReader; import java.. 2023. 7. 3.
[Gold IV] 주난의 난(難) - 14497 (JAVA) 문제 요약 주난이는 크게 화가 났다. 책상 서랍 안에 몰래 먹으려고 숨겨둔 초코바가 사라졌기 때문이다. 주난이는 미쳐 날뛰기 시작했다. 사실, 진짜로 뛰기 시작했다. ‘쿵... 쿵...’ 주난이는 점프의 파동으로 주변의 모든 친구들을 쓰러뜨리고(?) 누군가 훔쳐간 초코바를 찾으려고 한다. 주난이는 N×M크기의 학교 교실 어딘가에서 뛰기 시작했다. 주난이의 파동은 상하좌우 4방향으로 친구들을 쓰러뜨릴(?) 때 까지 계속해서 퍼져나간다. 다르게 표현해서, 한 번의 점프는 한 겹의 친구들을 쓰러뜨린다. 다음의 예를 보자. 1 # 1 0 1 1 1 1 1 0 1 0 0 1 0 0 1 * 1 1 1 1 1 0 1 1 1 1 0 0 1 1 0 0 1 주난이를 뜻하는 *은 (3, 4)에 있고, 초코바를 가진 학생 #.. 2023. 7. 1.