https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net bfs 문제이다. 핵심 이 문제는 시작점이 여러 개인 bfs 문제이다. 시작점이 여러 개라고 해서 크게 달라지는 것은 없다. 각 시작점에서 점차 값을 증가시키면 쉽게 풀 수 있다. 정답 코드 import java.util.*; import java.io.*; public class Main { static int N; static int M; static int[][] map; s..
https://www.acmicpc.net/problem/10986 10986번: 나머지 합 수 N개 A1, A2, ..., AN이 주어진다. 이때, 연속된 부분 구간의 합이 M으로 나누어 떨어지는 구간의 개수를 구하는 프로그램을 작성하시오. 즉, Ai + ... + Aj (i ≤ j) 의 합이 M으로 나누어 떨어지는 (i, j) www.acmicpc.net 누적합 문제이다. 핵심 이 문제는 연속한 합이 입력값 M으로 나누어지는 케이스를 구하는 것이다. 이를 각 배열의 합, 그때의 나머지를 구하면 아래와 같다. index 0 1 2 3 4 5 arr[i] 1 2 3 1 2 sum[i] 1 3 6 7 9 sum[i]%M 1 0 0 1 0 이때 우선 나머지가 0인 곳은 이전까지의 합이라 생각할 수 있으며, ..
https://www.acmicpc.net/problem/11286 11286번: 절댓값 힙 첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 이 문제는 이름에서도 알 수 있듯이 힙 문제이다. 문제자체는 매우 단순하다. 핵심 문제를 그대로 해석하면 0이면 절댓값이 작은 수를 반환하고, 0이 아닌 수이면 큐에 넣는 것이다. 우선큐의 Comparator를 재정의하면 쉽게 풀 수 있다. 정답 코드 import java.util.PriorityQueue; import java.util.Scanner; public class..
https://www.acmicpc.net/problem/1931 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 이 문제는 그리디 카테고리에 있는 문제이다. 핵심 이 문제의 핵심은 어떻게 배정을 해야 많은 사람이 이용할 수 있을까?이다. 끝나는 시간이 빠른 순서대로 정렬을 하고 그에 맞게 회의실에 넣어주면 된다. 코드를 보면 쉽게 이해할 수 있다. 정답 코드 import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Scanner; public class Main { public static void main(..
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AXNQOb3avD0DFAXS SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제 자체는 간단하고 이해하기 쉽다. 연속해서 출석을 할수록 높은 점수를 받는다. 이미 출석이 되어있고, P 개를 수정하여 가장 큰 연속된 수를 찾는 것이다. 핵심 이러한 문제가 대부분 그러하듯이 브루트포스로 풀게 되면 시간초과가 나오게 된다. 이 문제는 투 포인터를 사용해야 한다. 예제) 5 2 3 5 6 10 11 visited라는 배열에 공부한 날을 체크한다. 이미 출석한 날을 체크 이후 연속..
https://www.acmicpc.net/problem/2138 2138번: 전구와 스위치 N개의 스위치와 N개의 전구가 있다. 각각의 전구는 켜져 있는 상태와 꺼져 있는 상태 중 하나의 상태를 가진다. i(1 < i < N)번 스위치를 누르면 i-1, i, i+1의 세 개의 전구의 상태가 바뀐다. 즉, 꺼져 www.acmicpc.net 핵심 완전탐색을 하면 시간초과가 뜨게 된다. 따라서 다른 방법을 사용해야 한다. 그리디를 사용해서 풀면 쉽게 풀린다. 자기 자신의 스위치를 누르면 양옆과 본인의 스위치가 변한다. 0~n까지 이동할 때, i-1을 바꿀 수 있는 전구는 i 뿐이다. 즉 첫 번째 전구가 꺼진 경우와 켜진 경우 2가지를 나누어서 풀 수 있다. 정답 코드 import java.util.Scann..
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AX8BB5d6T7gDFARO&categoryId=AX8BB5d6T7gDFARO&categoryType=CODE&problemTitle=%EC%82%AC%ED%83%95&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 나연이는 A개의 사탕을, 다현이는 B개의 사탕을 갖고 있다. 두 사람은 아래와 같은 작업을 정확히 K번 반복하려고 한다..
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWqU0zh6rssDFARG SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 염라대왕은 이승의 사람들의 모든 이름을 가지고 있다. 어느 날 저승에 일어난 진도 8.0 지진에 항상 정리되어 있던 이승 명부가 흐트러졌다. 이승 명부는 이름의 길이가 짧을수록 이 앞에 있었고, 같은 길이면 사전 순으로 앞에 있었다. 이왕 이렇게 된 김에 모든 이름을 다시 정리하고 같은 이름은 하나만 남겨놓기로 한 염라대왕을 도와주자. 핵심 문제는 매우 단순하다. 우리가 원하는 조건으로 정렬을 하는..
https://www.acmicpc.net/problem/11052 11052번: 카드 구매하기 첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000) www.acmicpc.net 핵심 이 문제는 DP를 사용하여 쉽게 풀 수 있다. 테이블 정의 - DP [i] = 카드가 i개일 때 지불해야 하는 최대 금액 점화식 찾기 카드가 1개 들어있는 카드팩을 구매하고 카드 i-1개를 구입한다. 카드가 2개 들어있는 카드팩을 구매하고 카드 i-2개를 구입한다. 카드가 3개 들어있는 카드팩을 구매하고 카드 i-3개를 구입한다. 정답 코드 import java.util.Scanner; class ..
https://www.acmicpc.net/problem/16948 16948번: 데스 나이트 게임을 좋아하는 큐브러버는 체스에서 사용할 새로운 말 "데스 나이트"를 만들었다. 데스 나이트가 있는 곳이 (r, c)라면, (r-2, c-1), (r-2, c+1), (r, c-2), (r, c+2), (r+2, c-1), (r+2, c+1)로 이동할 수 있다. 크 www.acmicpc.net 핵심 bfs를 안다면 매우 쉽게 풀 수 있는 문제이다. 기존에 다루었던 네 방향에서 조금 응용된 느낌이다. 하지만 똑같은 방식으로 풀 수 있다. 정답 코드 import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; class Main { ..