생각정비소에 다녀간 어떤 고객이 지갑을 잃어버렸다. 모든 고객에게 전화를 할 수 없으므로 이 고객이 다녀갔던 접수 창고와 정비 창고를 이용한 고객들에게만 전화를 하려한다. 이 고객과 같은 접수 창고와 정비 창고를 이용한 고객 번호를 더한 값을 구하시오. 없을 경우 -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 점을 얻을 수 있을 때, 가장 높은 점수를 구하시오. (단, 핀볼의 시작 위치와 방향은 맘대로 결정할 수 있으며, 게임은 블랙홀에 빠지거나 처음 시작위치에 다시 되돌아오면 끝나게 된다.) 처음 생각우선 시뮬레이션으로 구현을 해주어야하고, 블록의 모양과 웜홀을 관리해줘야 한..
생각미생물이 담긴 N 크기의 배열과 안에 들어있는 미생물 군집들이 주어진다. 군집은 상 하 좌 우중 한 방향으로만 움직이며, N 배열의 가장 바깥줄(경계면)에 도달하면 현 생명력이 반절로 줄어들고 움직이는 방향은 반대 방향이 된다.(소수 단위는 절삭한다) 군집들은 1초에 한 칸씩만 움직이며 M 초동안 움직인다. 군집들이 한 칸에서 만날경우 미생물 수가 합쳐지며 방향은 가장 큰 군집이 가던 방향으로 결정된다. 군집이 서로 지나칠 경우는 만나는 경우가 아니다. 이 때, M 초후에 남아있는 미생물의 수를 구하시오. 이전 생각이전에 풀어보았던 문제인 (모의 SW 역량테스트] 원자 소멸 시뮬레이션) 와 상위호환? 하위호환? 되는 비슷한 문제이다. 요 문제의 경우는 무조건 부딪히는 원자와 다르게 서로 마주보고 있으..
생각체스에서 비숍은 대각선으로 만 이동할 수 있다. 체스판과 비숍을 놓을 수 있는 위치(1)가 주어질 때, 가장 많은 비숍을 놓을 수 있는 수를 구하시오 처음 생각맵에서 비숍을 가장 많이 놓아야하는 문제이므로 DFS를 진행하면서 안 될 경우 백트래킹을 진행하면 된다고 생각하였다. 다음 생각비숍을 놓을 수도 안 놓을 수도있는 자리가 1로 주어지고 아예 못놓는 자리가 0으로 주어지는데 반대로 생각해서 틀렸습니다를 얻었다. 다다음 생각다시 1과 0의 판단을 바꿔준 후, 제출하였지만 시간 초과를 얻었다. 우선 시간 초과를 해결해보기위해서 기존의 배열을 다보는 형식을 처음에 입력 받을 때 놓을 수 있는 위치만 List에 좌표값을 넣어주어 놓을 수 없는 위치는 배제하고 살펴보았다.▶ 좌,우 상향 대각선만 보면 되므..
생각대략 위의 그림과 같이 생긴 성곽이 있다. 굵은 선은 벽을 나타내고, 점선은 벽이 없어서 지나다닐 수 있는 통로를 나타낸다. 이러한 형태의 성의 지도를 입력받아서 다음을 계산하는 프로그램을 작성하시오. 처음 생각기존에 보던 미로 찾기와 다르게 방에대해서 벽의 조건을 주는 문제이다. 따라서 방 마다 상 하 좌 우로 갈 수 있는지 알아내기 위해서 Pair class를 만들어서 사용하였다. 다음 생각또 특이하게 갈 수 있는 길을 그냥 주지 않고 각각 1 2 4 8의 값을 매겨 더한 값을 준다. 문제에 힌트로 이진수라 생각하면 편하다 되어있으므로 수를 받아서 이를 이진수로 변환하여 갈 수 있는길 아닌길을 판단해 주었다. 다다음 생각우선 조건들 받기를 성공했다면 탐색을 통해서 1) 방의 개수 와 2) 제일 큰..
생각원자들이 있고, 각 원자들은 상 하 좌 우 중 한 방향으로만 전진을 한다. 각각의 원자들이 가지고 있는 에너지를 K 라 할 때, 둘 이상의 원자가 부딪히면 그 원자들의 K 값이 방출된다. 이 때, 방출된 K 값의 총합을 구하여라. 풀이후 생각어마어마 한 문제였다. 사진 한 장이 말을 대신해 준다. 제출이 17차지 머가 잘못됐는지를 찾기위해 질문도 올렸었다. 답변해주신 분들에게 감사합니다!결론부터 살펴보면 너무 어렵게 생각했다가 맞는 표현인 것 같다. 하지만 한 생각에 사로잡히면... 잠시 다른건 보이지 않는다는걸 이번에도 느끼게 되었다. 그래도 오류를 찾아서 PASS 시키면 묘하게 이맛에 문제푸나? 생각이 들기도 한다.▶ 우선 K=0인 값이 존재해서 오류 제보를 했다. 처음 생각좌표 평면이 마이너스 ..
생각벽돌깨기 게임을 진행한다. 각 벽돌이 아닌칸은 0으로 주어지며, 각 벽돌이 가지고있는 숫자(1~9)는 자신의 숫자-1 만큼 상하좌우의 벽돌을 연쇄로 깰 수 있다. 공을 쏠수 있는 횟수(1~4)와 벽돌의 맵의 크기 w,h(2~12)가 주어졌을 때, 최대한 많은 벽돌을 깬 후 남은 벽돌의 개수를 출력하여라. 처음 생각바로바로 풀 수 있는 문제들보다는 문제를 읽고 처음부터 생각을 해야하는 문제들이 나오는 추세인것 같다. 어떻게 벽돌을 많이 깰 수 있도록 공을 쏠 수 있을까?를 생각해보았다. 위에서 부터 한 줄씩 읽으면서 숫자가 큰게 나오면 없애주면 될까? 이건 반례가 너무 뻔히 보였다. 1 밑에 9같이 큰게 숨어있을 경우 안되기 때문이다. 그럼 어떻게 해봐야 할까..! ▶우선 브루트포스(완전탐색)을 살펴보..
- Total
- Today
- Yesterday