생각Github - https://github.com/hellojdh/Code/blob/master/src/swexpert/d1/Q1545.java 입력 받은 N 부터 0 까지 거꾸로 출력시켜라. 처음 생각입출력을 할 수 있는가에대한 문제이다. 입력이 적으므로 Scanner를 통해 입력을 받았다. 방안1) 입력이 많아질 경우는 BufferedReader를 사용하는 것이 좀 더 효율적이다. 12345678910111213package swexpert.d1; import java.util.Scanner; public class Q1545 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextI..
생각홈 방범 서비스를 하는 업체가 있다. 방범 범위 K 값에 따라 아래와 같이 범위가 달라진다. 주어진 M은 집마다 지불하는 방범 비용이다. 아래와 같은 경우 방범 서비스의 유지 비용과 방범 서비스로 벌어들이는 비용의 차 즉, 업체의 이익은 다음과 같다. K=3 이므로 3*3+(3-1)*(3-1)이 되어 운영 비용은 13이 되고 집들이 5개가 들어가 있으므로 M=3일 때, 3*5=15 가 되어 업체의 이익은 15-13 = 2 가 된다. 이경우 업체가 손해를 보지 않기 때문에 최대 방범 가능한 집의 수는 5개가 된다. 조건이 주어질 때, 업체가 손해 보지 않을 때 최대 집의 수를 출력하여라. 처음 생각수학적인게 생각나면 좋겠지만, BFS를 통해 K 만큼 범위를 넓혀가면서 집의 개수를 찾는 완전 탐색이 떠올..
생각보호 필름을 생산했다! 이 보호 필름의 성능을 체크하려고 한다. 깊이가 D이고 넓이가 W인 보호 필름이 다음과 같이 주어졌을 때, 열 별로 같은 특성이 연속해서 가진 경우는 다음과 같다. 여기서 연속 조건 K 개를 만족해야, 성능 테스트를 통과하게 된다. 위의 보호 필름에서 다음과 같이 2 행에 약물을 투여할 경우 모든 열에서 K=3일 때 조건을 만족시킬 수 있다. 성능 테스트를 통과시키기 위해서 약물을 최소한으로 투입하는 횟수를 구하여라. 처음 생각수학적인 공식이 전혀 떠오르지 않는다. 따라서 우선 완전 탐색을 진행하였다.▶ 시간도 기존의 문제들 보다 긴 5초를 준다. 그만한 이유가 있어 주는 것이라 생각한다. 다음 생각이걸 어떻게 완전 탐색으로 풀 수 있을까? 약물 주입이 변하는 조건이므로 해당 ..
생각두명의 사람이 벌꿀을 채취하려고한다. 각 사람은 [N][N] 배열에서 가로로 이어져있는 M 칸을 선택할 수 있는데, 두 사람이 고른 칸이 1칸이라도 중복이되어서는 안된다. 칸을 골랐으면 각자 주어진 C만큼 벌꿀 채취가 가능하다. 아래와 같이 주어진 벌꿀 판에서 C=13이고 M=2일 경우 최대 이득은 174가 된다. 위를 봐서는 모든 칸을 계산 하는 것 같지만 아래와 같이 주어진 C를 넘기지 않는 선에서 최대 값을 구하여야한다. N,M,C와 배열이 주어졌을 경우 최대값을 출력하라. 처음 생각주어진 배열에서 조건에따른 최대값을 찾아야한다. 따라서 별다른 생각이 나지 않아 완전 탐색을 하였다.▶ 조건이 행으로만 M칸 진행으로 주어졌기 때문에 각 행별로 M칸씩 모든 경우를 살펴보았다.▶ 주어진 N이 최대 1..
생각디저트 카페가 2차 배열에 숫자로 주어진다. 각 디저트 카페에서 아래 사진과 같이 대각선으로 다른 카페로 이동할 수 있다. 이 때, 같은 숫자를 가진 카페로는 이동을 하지 못할 때, 가장 많이 디저트를 먹을 수 있는 수를 출력하여라. 풀이후 생각이 문제를 풀이도중 하반기 서류탈락을 했습니다. 당분간은 역량 테스트용 문제는 조금 줄이고 일반 알고리즘 문제 위주로 풀어야겠네요. 서류 붙으신 분들은 축하드리고 이 글을 읽고 계시다는 자체가 테스트 통과를 위해 노력하고 계신다는 거니 잘 치루셔서 좋은 결과 있으시길 바라겠습니다! 처음 생각1 static int[][] dir = {{1,1},{1,-1},{-1,-1},{-1,1}};cs맵을 탐색하는데 상 하 좌 우가 아닌 대각선 방향으로 탐색을 진행하기 위해..
생각정비소에 다녀간 어떤 고객이 지갑을 잃어버렸다. 모든 고객에게 전화를 할 수 없으므로 이 고객이 다녀갔던 접수 창고와 정비 창고를 이용한 고객들에게만 전화를 하려한다. 이 고객과 같은 접수 창고와 정비 창고를 이용한 고객 번호를 더한 값을 구하시오. 없을 경우 -1을 출력한다. 풀이후 생각둘을 하나로 묶어서 풀이를 하려해서 시간이 무척 오래걸렸고, 결국 1개의 PriorityQueue와 1개의 일반 Queue를 이용해서 풀었다. 시간이 오래걸린 이유는 각 창구들을 들어가고 나갈 때, 우선순위를 설정해 주어야하는데 Comparator 1개로 모든걸 해주려하니 너무 복잡해져서 머리가 핑 돌아버렸다. 처음 생각우선 시간별로 완전 탐색을하여 PriorityQueue를 이용해서 우선 순위를 정해주며 진행을 하..
생각점심 시간에 사람들이 점심을 먹으러 계단을 내려가려고 한다. 계단이 2개 주어져있고 각각의 계단은 최대 3명만 이용이 가능하며, 3명이 계단을 내려가는 중일경우 도착한 사람은 계단입구에서 대기를 하고 있는다. 계단은 도착하자 마자 내려가지 못하고, 도착한 1분 후 부터 내려갈 수 있다. 사람은 1로 주어지고, 계단은 2~10으로 주어지며 2~10은 계단을 내려가는데 걸리는 시간을 의미한다. 사람과 계단의 상태가 주어질 때, 최소로 걸리는 시간을 구하시오. 처음 생각처음 문제를 봤을 때, 이걸 어떻게 구하지?? 라는 생각이 앞섰다. 문제를 찬찬히 읽어보니 가장 결정적인 힌트는 사람이 최대 10명이고, 계단은 무조건 2개라는 것이다. 따라서 계단을 편의상 1번,2번 이라고 하였을 때 사람들이 1번 2번을..
생각주어진 식재료를 반절씩 나누어 A 음식과 B 음식을 만든다. 음식을 만들 때 몇 번째 재료를 사용하였나에 따라서 재료에 따른 시너지 효과가 달라진다. 예를들어 아래와 같은 시너지가 주어졌을 때, 1과 2로 A 음식을 만들면 5 + 4의 시너지인 9가 된다. B음식은 3과 4로 3 + 3 = 6의 시너지가 되어 음식의 차이는 시너지의 차이인 3이된다. 이 차이가 최소가 되는 값을 찾아라. 처음 생각주어진 재료 개수에서 n/2개를 선택해서 A음식을 만들고 선택되지 않은 재료들로 B음식을 만들어 주기위해 방문 배열을 만들고 DFS를 이용하여 부분 집합을 만들어 주었다. 방안1) 입력에 개행이 많이 섞여서 주어지기 때문에 BufferedReader를 사용하지 않고, Scanner를 사용해서 입력을 받았다. ..
생각무선 충전기가 여러곳에 설치되어있다. 각각의 충전기는 각자의 파워와 범위를 가지고 있다. 사람 A,B 두명이 각 각 (1,1) (10,10)에서 출발하여 M 만큼의 방향 명령에 따라서 이동을 한다. 이 때, 한 충전 범위에 두명이 들어있다면 해당 충전 파워/2 만큼 충전을 할 수 있다. 같은 충전기의 범위에 2명이 들어있다해도, 1명이 다른 충전기를 사용하면 다른 한 명이 온전히 충전기를 사용할 수 있다. A 대의 무선 충전기의 위치와 파워 범위가 주어지고, A,B의 이동 현황이 주어질 때 최대 충전 파워를 구하시오. 처음 생각A와 B가 이동 할 때마다 각각의 충전기와 거리를 계산해 범위에 들어가는 확인하는 것은 비효율 적이라 생각하여, 미리 맵 배열에 충전기의 범위 만큼 리스트에 들어있는 각 충전기..
생각핀볼 게임을 진행한다. 이 핀볼게임에는 블랙홀과 웜홀, 다양한 모양의 블록이 있다. 1) 블랙홀 블랙홀은 -1로 주어지며 블랙홀에 들어가면 게임이 끝난게 된다. 2) 웜홀 웜홀은 항상 쌍으로 주어지며 6~10번으로 주어진다. 웜홀로 들어가면 쌍을 이룬 다른 웜홀로 나와 진행하던 방향대로 진행한다. 3) 블록 블록은 1~5로 주어지며 아래와 같은 모양을 가지고 있다. 게임을 진행할 때, 맵 둘레의 벽에 부딪히거나 블록에 부딪히면 +1 점을 얻을 수 있을 때, 가장 높은 점수를 구하시오. (단, 핀볼의 시작 위치와 방향은 맘대로 결정할 수 있으며, 게임은 블랙홀에 빠지거나 처음 시작위치에 다시 되돌아오면 끝나게 된다.) 처음 생각우선 시뮬레이션으로 구현을 해주어야하고, 블록의 모양과 웜홀을 관리해줘야 한..
- Total
- Today
- Yesterday