목록전체 글 (245)
말랑한 하루
[ 문제 ] 더보기 한 개의 회의실이 있는데 이를 사용하고자 하는 N개의 회의에 대하여 회의실 사용표를 만들려고 한다. 각 회의 I에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 개수를 찾아보자. 단, 회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 회의의 시작시간과 끝나는 시간이 같을 수도 있다. 이 경우에는 시작하자마자 끝나는 것으로 생각하면 된다. 입력 첫째 줄에 회의의 수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N+1 줄까지 각 회의의 정보가 주어지는데 이것은 공백을 사이에 두고 회의의 시작시간과 끝나는 시간이 주어진다. 시작 시간과 끝나는 시간은 23..
[ 문제 ] 더보기 Brainf**k 프로그램이 주어졌을 때, 이 프로그램이 끝나는지, 무한 루프에 빠지는지 알아내는 프로그램을 작성하시오. 무한 루프란, 특정 시점부터 탈출하지 않고 무한히 반복 실행되는 루프를 말한다. Brainf**k 인터프리터는 정수를 담는 하나의 배열(unsigned 8-bit 정수)과, 그 배열의 칸 하나를 가리키는 포인터로 이루어져 있다. Brainf**k 프로그램은 다음과 같이 8개의 명령어로 이루어져 있다. -+[]., 포인터가 가리키는 수를 1 감소시킨다. (modulo 28) 포인터가 가리키는 수를 1 증가시킨다. (modulo 28) 포인터를 왼쪽으로 한 칸 움직인다. 포인터를 오른쪽으로 한 칸 움직인다. 만약 포인터가 가리키는 수가 0이라면, [ 와 짝을 이루는 ]..
[ 문제 ] 더보기 도영이는 짜파구리 요리사로 명성을 날렸었다. 이번에는 이전에 없었던 새로운 요리에 도전을 해보려고 한다. 지금 도영이의 앞에는 재료가 N개 있다. 도영이는 각 재료의 신맛 S와 쓴맛 B를 알고 있다. 여러 재료를 이용해서 요리할 때, 그 음식의 신맛은 사용한 재료의 신맛의 곱이고, 쓴맛은 합이다. 시거나 쓴 음식을 좋아하는 사람은 많지 않다. 도영이는 재료를 적절히 섞어서 요리의 신맛과 쓴맛의 차이를 작게 만들려고 한다. 또, 물을 요리라고 할 수는 없기 때문에, 재료는 적어도 하나 사용해야 한다. 재료의 신맛과 쓴맛이 주어졌을 때, 신맛과 쓴맛의 차이가 가장 작은 요리를 만드는 프로그램을 작성하시오. 입력 첫째 줄에 재료의 개수 N(1 ≤ N ≤ 10)이 주어진다. 다음 N개 줄에는..
[ 핵심풀이 ] 0) 별이 있는곳을 찾아 8가지방향에 대해 1씩 증가시켜준다 1) 0인곳을 찾았을 때 cnt를 1개 증가시키고 bfs를 돌려 모든 0인부분을 체크해주고, 0이아닌 숫자가 나온다면 체크후 끝낸다 2) 체크된부분과 지뢰를 제외하고 체크되지 않은 숫자가 나올때마다 cnt를 1개씩 증가시켜준뒤 답을 출력하면 간단하다. [ Java ] import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; class ..
[ 핵심풀이 ] 첨에 dfs로 돌려서 시간초과가 나왔기때문에 프로그래머스 등굣길 문제와 같은 Dp개념으로 풀어야 시간초과가 나오지않는다! 4방향이 아닌, 2가지방향(상→하,좌→우)로만 움직이기때문에 계산은 간편하다! 배열중 어느한곳에있다면 상→하, 좌→우로 올 수 있는 두 가지 경우에 대해 2와 5의 개수가 적은값을 가져가면된다. 단, 첫줄의 상→하, 좌→우구간은 방문할 수 있는 경우의수가 1개이므로 비교하지 않아도된다. 1) 0이 나올수 있는 경우는 2와 5가 1개씩 생성될 때이므로 map의 모든숫자에 대해 2와 5로 소인수분해 해준다. 2) 맵이 0인경우는 가지않는다 3) 시작부분은 가지않는다 4) 시작부분에 걸친 세로, 가로줄은 2가지 방향을 비교하지 않고 1가지 방향에 대해서만 처리한다 5) 나머..
[ 문제 ] 더보기 명우기업은 2008년부터 택배 사업을 새로이 시작하기로 하였다. 우선 택배 화물을 모아서 처리하는 집하장을 몇 개 마련했지만, 택배 화물이 각 집하장들 사이를 오갈 때 어떤 경로를 거쳐야 하는지 결정하지 못했다. 어떤 경로를 거칠지 정해서, 이를 경로표로 정리하는 것이 여러분이 할 일이다. 예시된 그래프에서 굵게 표시된 1, 2, 3, 4, 5, 6은 집하장을 나타낸다. 정점간의 간선은 두 집하장간에 화물 이동이 가능함을 나타내며, 가중치는 이동에 걸리는 시간이다. 이로부터 얻어내야 하는 경로표는 다음과 같다. 경로표는 한 집하장에서 다른 집하장으로 최단경로로 화물을 이동시키기 위해 가장 먼저 거쳐야 하는 집하장을 나타낸 것이다. 예를 들어 4행 5열의 6은 4번 집하장에서 5번 집하..
[ 문제 ] 더보기 크기가 N×M인 배열이 있을 때, 배열을 돌려보려고 한다. 배열은 다음과 같이 반시계 방향으로 돌려야 한다. A[1][1] ← A[1][2] ← A[1][3] ← A[1][4] ← A[1][5] ↓ ↑ A[2][1] A[2][2] ← A[2][3] ← A[2][4] A[2][5] ↓ ↓ ↑ ↑ A[3][1] A[3][2] → A[3][3] → A[3][4] A[3][5] ↓ ↑ A[4][1] → A[4][2] → A[4][3] → A[4][4] → A[4][5] 예를 들어, 아래와 같은 배열을 2번 회전시키면 다음과 같이 변하게 된다. 1 2 3 4 2 3 4 8 3 4 8 6 5 6 7 8 1 7 7 6 2 7 8 2 9 8 7 6 → 5 6 8 2 → 1 7 6 3 5 4 3 2 ..
[ 핵심풀이 ] 0) 각 Line을 층수로 두고, 층수와 번호의 값을 계산하여 수식으로 표현하는방법 1) 각 번호가 갈 수 있는 다리를 놓아주는것 1-1) 중복된 다리는 제거해야한다 1-2) 소스코드내 다리를 놓는방법 : 현재있는곳의 번호:index, 층수:floor ● 각 층수에서 자신의 위쪽 층수만 판단하기로한다 (아래층으로 확인하면 10000일때를 가늠하기힘듬) ◎ 맨 좌측의 경우 우측상단만 추가한다. 바로 우측만 추가한다. ◎ 맨 우측의 경우 좌측상단만 추가한다. 바로 좌측만 추가한다. ◎ 가운데일 경우 우측, 좌측상단 모두 추가한다. 바로 우측, 좌측 모두 추가한다. *소스코드가 심오해서 나조차도 못알아볼수있으니 주석은 냅두겠다. [ 핵심소스 ] 피라미드를 만들면서 다리를 연결시키는 것을 구현해..