알고리즘 90

프로그래머스 Lv.2 덧칠하기 - JAVA

문제 어느 학교에 페인트가 칠해진 길이가 n미터인 벽이 있습니다. 벽에 동아리-학회 홍보나 회사 채용 공고 포스터 등을 게시하기 위해 테이프로 붙였다가 철거할 때 떼는 일이 많고 그 과정에서 페인트가 벗겨지곤 합니다. 페인트가 벗겨진 벽이 보기 흉해져 학교는 벽에 페인트를 덧칠하기로 했습니다. 넓은 벽 전체에 페인트를 새로 칠하는 대신, 구역을 나누어 일부만 페인트를 새로 칠 함으로써 예산을 아끼려 합니다. 이를 위해 벽을 1미터 길이의 구역 n개로 나누고, 각 구역에 왼쪽부터 순서대로 1번부터 n번까지 번호를 붙였습니다 그리고 페인트를 다시 칠해야 할 구역들을 정했습니다. 벽에 페인트를 칠하는 롤러의 길이는 m미터이고, 룰러로 벽에 페인트를 한 번 칠하는 규칙은 다음과 같습니다. - 롤러가 벽에서 벗어..

알고리즘 2023.03.17

백준 No.18223 민준이와 마산 그리고 건우- JAVA

문제 종강을 맞은 민준이는 마산으로 내려갈 계획을 짜고 있었다. 늘 그랬듯, 마산으로 갈 버스를 예약하려던 순간 민준이는 집으로 가는 다른 방법이 떠올랐다. 그것은 직접 지도를 보고 고향으로 가는 가장 짧은 길을 찾는 것이었다. 그때, 먼저 고향으로 내려갔던 친구인 건우에게 연락이 왔다. 건우는 고향으로 내려가던 중 알 수 없는 일에 휘말려 외딴곳에 혼자 남겨지게 되었다. 건우는 유일한 구세주인 민준이에게 도움을 처한 것이었다. 그러나 마산의 남자인 민준이에게는 마산이 먼저였다. 민준이는 처량한 건우를 무시한 채 고향으로 떠나려고 했지만, 만약 고향으로 가는 길에 건우가 있다면 겸사겸사 도움을 줄 수 있을 것 같았다. 지도는 양방향 그래프 형태로 되어있다. 출발지는 1번 정점 마산은 V번 정점이다. 정점..

알고리즘 2023.03.13

백준 No.6497 전력난 - JAVA

문제 성진이는 한 도시의 시장인데 거지라서 전력난에 끙끙댄다. 그래서 모든 길마다 원래 켜져 있던 가로등 중 일부를 소등하고리 하였다. 길의 가로등을 켜 두면 하루에 길의 미터 수만큼 돈이 들어가는데, 일부를 소등하여 그만큼의 돈을 절약할 수 있다. 그러나 만약 어떤 두 집을 왕래할 때, 불이 켜져 있지 않은 길을 반드시. 지나야 한다면 위험하다. 그래서 도시에 있는 두 집 쌍에 대해, 불이 켜진 길만으로 서로를 왕래할 수 있어야 한다. 위 조건을 지키면서 절약할 수 있는 최대 액수를 구하시오 주의할 점 - 문제에 주어진 입력과 출력은 맞았는데 제출하면 런타입에러랑 25퍼에서 계속 틀렸는데 N이랑 M이 0이 주어지면 반복문을 끝내는 식으로 해야하고, graph를 초기화를 해줘야 했었다. 풀이 문제는 결국..

알고리즘 2023.03.12

백준 No.1647 도시 분할 계획 - JAVA

문제 동물원에서 막 탈출한 우너숭이 한 마리가 세상구경을 하고 있다. 그러다가 평화로운 마을에 가게 되었는데, 그곳에서는 알 수 없는 일이 벌어지고 있었다. 마을은 N개의 집과 그 집들을 연결하는 M개의 길로 이루어져 있다. 길은 어느 방향으로든지 다닐 수 있는 편리한 길이다. 그리고 각 길마다 길을 유지하는데 드는 유지비가 있다. 마을의 이장은 마을을 두 개의 분리된 마을로 분할할 계획을 가지고 있다. 마을이 너무 커서 혼자서는 관리할 수 없기 때문이다. 마을을 분할할 때는 각 분리된 마을 안에 집들이 서로 연결되도록 분할해야 한다. 각 분리된 마을 안에 있는 임의의 두 집 사이에 경로가 항상 존재해야 한다는 뜻이다. 마을에는 집이 하나 이상 있어야 한다. 그렇게 마을의 이장은 계획을 세우다가 마을 안..

알고리즘 2023.03.11

백준 No.27112 시간 외 근무 멈춰! - JAVA

문제 오늘도 여러 체계의 개발 임무를 열심히 수행 중인 준민이에게 갑자기 새로운 개발프로젝트가 들어왔다. 해당 개발 프로젝트는 총 N개의 작업으로 이루어져 있으며, 각 작업은 t의 근무일이 필요하며 개발 프로젝트가 시작한 이후 d일이 지나기 전에 끝내야 한다. 그러나 평시 근무만으로는 모든 N개의 작업을 시간 내에 끝내기 힘들어 보였던 준민이는 개인 정비시간을 포기하며 시간 외 근무를 하고자 한다. 개발 프로젝트는 월요일부터 시작하며, 평시 근무는 월요일부터 금요일까지만 진행한다. 시간 외 근무는 요일과 관계없이 매일 최대 한 번씩만 진행할 수 있으며, 시간 외 근무를 1회 진행하면 1일치 업무를 끝마칠 수 있다. 준민이는 이를 토대로 효과적인 일정을 짜고 싶었지만, 이미 프로젝트로 너무 바빠진 준민이는..

알고리즘 2023.03.10

백준 No.14284 간선 이어가기2 - JAVA

문제 정점 n개, 0개의 간선으로 이루어진 무방향 그래프가 주어진다. 그리고 m개의 가중치 간선의 정보가 있는 간선 리스트가 주어진다. 간선리스트에 있는 간선 하나씩 그래프에 추가해 나갈 것이다. 이때, 특정 정점 s와 t가 연결이 되는 시점에서 간선 추가를 멈출 것이다. 연결이랑 두 정점이 간선을 통해 방문 가능한 것을 말한다. s와 t가 연결이 되는 시점의 간선의 가중치의 합이 최소가 되게 추가하는 간선의 순서를 조정할 때, 그 최솟값을 구하시오. 키워드 s와 t가 연결이 되는 시점의 간선의 갖우치의 합이 최소가 되게 추가하는 간선의 순서를 조정할 때 그 최솟값을 구하시오 -> 다익스트라인데 여기서 s 정점에서 t정점에 가는 간선 중에 최단 경로를 구하라는 것인데 무방향이라 코드에서는 양방향으로 구현..

알고리즘 2023.03.06

백준 No.1783 병든 나이트 - JAVA

문제 병든 나이트가 N × M 크기 체스판의 가장 왼쪽아래 칸에 위치해 있다. 병든 나이트는 건강한 보통 체스의 나이트와 다르게 4가지로만 움직일 수 있다. 2칸 위로, 1칸 오른쪽 1칸 위로, 2칸 오른쪽 1칸 아래로, 2칸 오른쪽 2칸 아래로, 1칸 오른쪽 병든 나이트는 여행을 시작하려고 하고, 여행을 하면서 방문한 칸의 수를 최대로 하려고 한다. 병든 나이트의 이동 횟수가 4번보다 적지 않다면, 이동 방법을 모두 한 번씩 사용해야 한다. 이동 횟수가 4번보다 적은 경우(방문한 칸이 5개 미만)에는 이동 방법에 대한 제약이 없다. 체스판의 크기가 주어졌을 때, 병든 나이트가 여행에서 방문할 수 있는 칸의 최대 개수를 구해보자. 문제에서 키워드는 4가지 방법, 이동횟수가 4번보다 작은 경우 이동 방법에..

알고리즘 2023.03.06

백준 No.1719 택배 - JAVA

문제 명우기업은 2008년부터 택배 사업을 새로이 시작하기로 하였다. 우선 택배 화물을 모아서 처리하는 집하장을 몇 개 마련했지만, 택배 화물이 각 집하장들 사이를 오갈 때 어떤 경로르 거쳐야 하는지 결정하지 못했다. 어떤 경로를 거칠지 정해서, 이를 경로표로 정리하는 것이 여러분이 할 일이다. 예시된 그래프에서 굵게 표시된 1,2,3,4,5,6은 집하장을 나타낸다. 정점간의 간선은 두 집하장간에 화물 이동이 가능함을 나타내며, 가중치는 이동에 걸리는 시간이다. 이로부터 얻어내야 하는 경로표는 다음과 같다. 경로표는 한 집하장에서 다른 집하장으로 최단경로로 화물을 이동시키기 위해 가장 먼저 거쳐야 하는 집하장을 나타낸 것이다. 예를 들어 4행 5열의 6은 4번 집하장에서 5번 집하장으로 최단 경로를 통해..

알고리즘 2023.03.05

백준 No.16953 A->B (JAVA)

문제 정수 A를 B로 바꾸려고 한다. 가능한 연산은 다음과 같은 두 가지이다. - 2를 곱한다. - 1을 수의 가장 오른쪽에 추가한다. A를 B로 바꾸는데 필요한 연산의 최솟값을 구해보자 2 162 풀이 - A가 B로 가는 걸 구하는 건 정말 막막하다. - 거꾸로 생각해보면 쉬웠다. B-> A 가 되는 걸 구해보면 쉽게 구할 수 있다. - 162가 2로 나눠질 경우 - 2로 나눠지지 않을 경우 -> (끝자리가 1로 끝나는지 안 끝나는지 안 끝날 경우 -1 출력) 162를 2로 나누면 81 -> 끝자리가 1로 끝남 1빼버림 8 -> 2로 나눠짐 4 -> 2로 나눠짐 2 끝 카운트는 총 4번이고 여기서 1을 더해서 출력하면 됨 출력 조건에 그렇게 되어음 import javax.swing.plaf.synth...

알고리즘 2023.03.03

백준 No.14938 서강그라운드 - JAVA

문제 예으이는 요즘 가장 인기가 있는 게임 서강그라운드를 즐기고 있다. 서강그라운드는 여러 지역 중 하나의 지역에 낙하산을 타고 낙하하여 , 그 지역에 떨어져 있는 아이템들을 이용해 서바이벌을 하는 게임이다. 서강그라운드에서 1등을 하면 보상으로 치킨을 주는데, 예은이는 단 한번도 치킨을 먹을 수가 없었다. 자신이 치킨을 못 먹는 이유는 실력 때문이 아니라 아이템 운이 없어서라고 생각한 예은이는 낙하산에서 떨어질 때 각 지역에 아이템 들이 몇 개 있는지 알려주는 프로그램을 개발을 하였지만 어디로 낙하해야 자신의 수색 범위 내에서 가장 많은 아이템을 얻을 수 있는지 알 수 없었다. 각 지역은 일정한 길이 l 의 길로 다른 지역과 연결되어 있고 이 길은 양방향 통행이 가능하다. 예은이는 낙하한 지역을 중심으..

알고리즘 2023.03.03