알고리즘 90

백준 No.10282 해킹 - JAVA

문제 최흉최악의 해커 yum3이 네트워크 시설의 한 컴퓨터를 해킹했다! 이제 서로에 의존하는 컴퓨터들은 점차 하나둘 전염되기 싲가한다. 어떤 컴퓨터 a가 다른 컴퓨터 b에 의존한다면 b가 감연되면 그로부터 일정시간 뒤 a도 감염되고 만다. 이때 b가 a를 의존하지 않는다면 a가 감염되더라도 b는 안전하다. 최흉최악의 해커 yum3이 해킹한 컴퓨터 번호와 각 의존성이 주어질 때, 해킹당한 컴퓨터까지 포함하여 총 몇 대의 컴퓨터가 감염되며 그에 걸리는 시간이 얼마인지 구하는 프로그램을 작성하시오 2 3 2 2 2 1 5 3 2 5 3 3 1 2 1 2 3 1 8 3 2 4 주의할 점 - 계속 풀어봐도 해킹 당한 노드는 3개가 나왔는데 문제에 함정이 있었다.... 이때 b가 a를 의존하지 않는다면, a가 감염..

알고리즘 2023.02.24

백준 No.9237 이장님 초대 - JAVA

문제 농부 상근이는 마당에 심기 위한 나무 묘목 n개를 구입했다. 묘목 하나를 시믄ㄴ데 걸리는 시간은 1일이고, 상근이는 각 묘목이 다 자라는데 며칠이 걸리는지 정확하게 알고 있다. 상근이는 마을 이장님을 초대해 자신이 심은 나무를 자랑하려고 한다. 이장님을 실망시키면 안되기 때문에, 모든 나무가 완전히 자란 이후에 이장님을 초대하려고 한다. 즉, 마지막 나무가 다 자란 다음날 이장님을 초대할 것이다. 상근이는 나무를 심는 순서를 신중하게 골라 이장님을 최대한 빨리 초대하려고 한다. 이장님을 며칠에 초대할 수 있을까? 풀이 - 가장 오래걸리는 묘목을 먼저 심어야만 최대한 빠르게 이장님을 초대할 수 있는 방법이다. - 내림차순을 정렬한다. - for문을 만드는데 여기서 (i+1)+(arr[i]) 를 통해 ..

알고리즘 2023.02.23

백준 No.1916 최소비용 구하기 - JAVA

문제 N개의 도시가 있다. 그리고 한 도시에서 출발하여 다른 도시에 도착하는 M개의 버스가 있다. 우리는 A번째 도시에서 B번쨰 도시까지 가는데 드는 버스 비용을 최소화 시키려고 한다. A번째 도시에서 B번째 도시까지 가는데 드는 최소비용을 출력하여라. 도시의 번호는 1부터 N까지이다. 풀이 - dijkstra 알고리즘을 통해 start(시작지점을) 파라미터로 넘겨서 dist 배열을 start에서 시작했을 경우 각 노드에 최단 거리를 구한다. 여기서 버스비용이 가중치이다. - 그렇기 실행하게 되면 dist는 start에서 모든 인덱스(노드)까지의 최단거리가 될 것이다. 이제 dist에 도착점 인덱스를 출력하면 정답이다. import java.io.BufferedReader; import java.io.I..

알고리즘 2023.02.23

백준 No.1504 특정한 최단 경로 - JAVA

문제 방향성이 없는 그래프가 주어진다. 세준이는 1번 정점에서 N번 정점으로 최단 거리로 이동하려고 한다. 또한 세준이는 두 가지 조건을 만족하면서 이동하는 특정한 최단 경로를 구하고 싶은데, 그것은 바로 임의로 주어진 두 정점은 반드시 통과해야한다는 것이다. 세준이는 한 번 이동했던 정점은 물론, 한번 이동했던 간선도 다시 이동할 수 있다. 하지만 반드시 경로로 이동해야 한다는 사실에 주의하라. 1번 정점에서 N번 정점으로 이동할 때 주어진 두 정점을 반드시 거치면서 최단 경로로 이동하는 프로그램을 작성하시오 입력 4 6 1 2 3 2 3 3 3 4 1 1 3 5 2 4 5 1 4 4 2 3 주의사항 처음에 계속 주어진 입력을 넣었을 때 간단하게 답이 나왔는데 계속 틀려서 너무 화났는데 알고보니 문제에..

알고리즘 2023.02.22

백준 No. 14916 거스름돈 JAVA

문제 춘향이는 편의점 카운터에서 일한다. 손님이 2원짜리와 5원짜리로만 거스롬돈을 달라고 한다. 2원짜리 동전과 5원짜리 동전은 무한정 많이 가지고 있다. 동전의 개수가 최소가 되도록 거슬러 주어야한다. 거스름 돈이 n인 경우, 최소 동전의 개수가 몇 개인지 알려주는 프로그램을 작성하시오. 예를 들어, 거스름돈이 15원이면 5원짜리 3개를, 거스름돈이 14원이면 5원짜리 2개와 2원짜리 2개로 총 4개를, 거스름 돈이 13원이면 5원짜리 1개와 2원짜리 4개로 총 5개를 주어야 동전의 개수가 최소가 된다. 풀이 반복문을 true로 돌린다. 그러면서 해당 값이 5로 나누어 떨어지면 break 하면서 주어진 값을 5로 나누고 나눈 값을 count에 추가한다. 5로 나누어 떨어지지 않으면 주어진 수인 2로 계..

알고리즘 2023.02.21

백준 No. 1238 파티 JAVA

문제 N개의 숫자로 구분된 각각의 마을에 한 명의 학생이 살고 있다. 어느 날 이 N명의 학생이 X번 마을에 모여서 파티를 벌이기로 했다. 이 마을 사이에는 총 M개의 단방향 도로들이 있고 i번째 길을 지나는데 T 시간을 소비한다. 각각의 학생들은 파 참석하기 위해 걸어가서 다시 그들이 마을로 돌아와야한다. 하지만 이 학생들은 워낙 게을러서 최단 시간에 오고 가기를 원한다. 이 도로들은 단방향이기 때문에 아마 그들이 오고 가는 길이 다를지도 모른다. N명의 학생들 중 오고 가는데 가장 많은 시간을 소비하는 학생은 누구일지 구하여라 4 8 2 1 2 4 1 3 2 1 4 7 2 1 1 2 3 5 3 1 2 3 4 4 4 2 3 문제를 잘못 이해했던 점 다익스트라로 푸는 문제인 건 알겠는데 그래서 결국 x가..

알고리즘 2023.02.21

백준 No.10610 30 - JAVA

https://www.acmicpc.net/problem/10610 10610번: 30 어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한 www.acmicpc.net 문제 어느날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한다. 미르코를 도와 그가 만들고 싶어하는 수를 계산하는 프로그램을 작성하라 문제 풀이 - 일단 30으로 나누어지는 조건을 따져본다. -> 3의 배수는 해당 자리 순을 더했을 때 3으로 나누어 떨어진다 ->..

알고리즘 2023.02.20

백준 No.1049 기타줄 - JAVA

문제 Day Of Mourning 의 기타리스트 강토가 사용하는 기타에서 N개의 줄이 끊어졌다. 따라서 새로운 줄을 사거나 교체해야한다. 강토는 되도록이면 돈을 적게 쓰려고 한다. 6줄을 패키지를 살 수도 있고, 1개 또는 그 이상의 줄을 낱개로 살 수도 있다. 끊어진 기타줄의 개수 N과 기타줄 브랜드 M개가 주어지고, 각각의 브랜드에서 파는 기타줄 6개가 들어있는 패키지의 가격, 낱개로 살 때의 가격이 주어질 때, 적어도 N개를 사기 위해 피룡한 돈의 수를 최소로 하는 프로그램을 작성하시오. 4 2 12 3 15 4 어려웠던 점 처음에 두개의 값이 주어지기 때문에 2차원 배열로 접근했다. new int[M][2] 이렇게 접근했는데 문제를 풀 수 없었다... 둘 다 최소일 수가 없었다..... 풀이 - ..

알고리즘 2023.02.17

백준 No.2217 로프 - JAVA

문제 N 개의 로프가 있따. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하지만 여러 개의 로프를 병렬로 연결하면 각각의 로프에 걸리는 중량을 나눌 수 있다. k개의 로프를 사용하여 중량이 w인 물체를 들어올릴 때, 각각의 로프에는 모두 고르게 w/k만큼의 중량이 걸리게 된다. 각 로프들에 대한 정보가 주어졌을 때, 이 로프들을 이용하여 들어올릴 수 있는 물체의 최대 중량을 구해내는 프로그램을 작성하시오. 모든 로프를 사용해야 할 필요는 없으며, 임의로 몇 개의 로프를 골라서 사용해도 된다. 2 10 15 풀이 - 처음에 로프의 제일 작은 값으로 하려 했다. 그러면 모두 무게를 나눠가지며 할 수 ..

알고리즘 2023.02.17

백준 No.1946 신입사원 - JAVA

문제 언제나 최감ㄴ을 지향하는 굴지의 대기업 진영 주식회사가 신규 사원 채용을 실시한다. 인재 선발 시험은 1차 서류심사와 2차 면접시험으로 이루어진다. 최고만을 지향한다는 기업의 이념에 따라 그들은 최고의 인재들만을 사원을 선발하고 싶어한다. 그래서 진영 주식회사는, 다른 모든 지원자와 비교했을 때 서류심사 성적과 면접시험 성적 중 적어도 하나가 다른 지원자보다 떨어지지 않는 자만 선발한다는 원칙을 세웠다. 즉, 어떤 지원자 a의 성적이 다른 지원자 b의 성적에 비해 서류심사 결과와 면접 성적이 선발되지 않는다. 이러한 조건을 만족시키면서, 진영 주식회사가 이번 신규사원 채용에서 선발할 수 있는 신입사원의 최대 인원수를 구하는 프로그램을 작성하시오 2 5 3 2 1 4 4 1 2 3 5 5 7 3 6 ..

알고리즘 2023.02.16