목록SW (20)
시간이 NullNull
선표는 가게에서 처음으로 스파게티 면을 샀다. 봉투에 적힌 정보에 따르면, 면을 정확히 B초 동안 삶아야 이상적인 상태의 면이 된다고 한다. 그러나 안타깝게도, 지금 선표집의 모든 시계는 고장이 났다. 그래서 가게에서 모래시계를 하나 사서 집으로 가려고 한다. 가게에는 N개의 모래시계가 있고, i번째 모래시계는 정확히 xi초를 측정할 수 있다. 모래가 다 내려오면 바로 모래시계를 뒤집는 것으로 2xi초, 3xi초, …도 측정할 수 있다. 그러나 나머지 시간은 측정할 수 없다. 선표는 모래시계로는 정확한 시간을 측정할 수 없을 것 같아서, 조금 타협하여 E초 정도의 오차를 허용하려고 한다. 그러므로, 어떤 하나의 모래시계를 구입하여 B – E초에서 B + E초 중 하나를 측정해낼 수 있으면 된다. 구입해도..

경표는 아래와 같이 삼각형 모양으로 숫자를 쌓기로 했다. 1층에는 1개, 2층에는 3개, 3층에는 5개, … 와 같이 쌓는다. 위와 같이 경표는 끝도 없이 피라미드를 쌓을 때, N층의 제일 왼쪽, 오른쪽에 쓰게 될 숫자가 무엇일지 예측해보자. 결국 숫자의 규칙을 찾으면 피라미드를 만들 필요도 없이 숫자를 바로 구할 수 있다. 어... 이 문제의 경우 사실 최대한 몇번째 줄인지를 나타내는 N에 대해서 연관지어서 생각한다면 금방 알 수 있다. Tip. 이런 문제의 경우 숫자가 매우 불규칙해 보이므로 1을 더하거나 빼고 그 숫자를 다시 무언가를 해보도록 하자 아래에는 이 문제의 소스 코드이다. import java.io.BufferedReader; import java.io.BufferedWriter; imp..
태영이는 N개의 다이아몬드를 가지고 있다. 각 다이아몬드 크기는 1 이상 10000 이하의 자연수로 나타낼 수 있다. 태영이는 N개의 다이아몬드 중 몇 개를 골라, 애인에게 선물로 주려고 한다. 한편, 태영이는 고른 다이아몬드의 크기가 뒤죽박죽이면 애인이 좋아하지 않을 것이라고 생각하여, 고른 다이아몬드 중 크기 차가 K 이하인 것들을 묶음으로 가져가려고 한다. (단, 묶음은 여러 묶음일 수 있다.) 태영이가 애인에게 선물할 수 있는 다이아몬드의 최대 개수는 얼마인가? 이 문제는 D4 답게 최소한의 효율만 생각하면서 풀었다. 완탐을 하더라도 가능은 할 것 같으나 별다른 좋은 수가 떠오르지 않아 적당히 효율만 챙기면서 하였다. 1. 완탐을 할 것이나 그나마 조금의 효율을 위해 다이아 크기의 min값과 ma..
1초에 한번씩 원자들이 움직이는데 충돌할 경우 그대로 에너지를 방출하고 소멸한다 이 때 방출된 에너지의 총합을 구하는 문제이다. 문제의 이름부터 아주 고정관념이 한참 생겨 무조건 시뮬레이션으로 풀어야지! 라는 생각에 여러번 틀렸던 문제이다. 하지만 생각해보면 충돌할 경우만 생각하여 에너지만 구해주고 끝내면 되는 문제이다. ( 시간이 무한히 흐른다면 ( 이 문제의 경우 최대 2000초(문제 내에서 시간) ) 충돌되지 않은 원자들은 밖으로 빠져 나간다. 빠져나간 원자들은 고려하지 않아도 된다. 이 원자들은 평생 만날 일이 없기 때문이다.) 주변에 어떤 친구는 0초부터 2000초 까지 for문을 통해서 모든 경우를 다해준 경우도 있었고 이전 포스트들에서 본 것처럼 또 충돌 나는 것들은 여러개의 Map을 통해서..
이 문제는 무려 5초를 주었다는 점과 N의 수가 작아 N*N을 하더라도 10000인 점 미생물의 수가 1000개 이하라는 점이 무조건 시뮬레이션이라는 생각이 들어 쉽게 풀게 되었다. 내가 사용한 변수들은 int[][] maxMap, int[][] dirMap, int[][] sumMap 이다 이름만 봐도 어떤 용도인지 알겠으나 나중에 더 자세히 설명하겠다. 1. m일 동안 진행하기 때문에 0~m-1까지 for문 돌기 2. 미생물이 합쳐지기도 죽기도 하기때문에 list가 아닌 Queue 사용 하였는데 하루동안 한칸만 움직여야 하기때문에 Q의 사이즈를 이용하여 그만큼만 for문을 돌아주었다. 3. 문제에 나와있듯이 한칸 움직인 후 배열의 가장 바깥쪽 칸들에 가면 크기를 반으로 줄이고 방향을 반대로 바꿔주었다..