생각Github - https://github.com/hellojdh/Code/blob/master/src/baekjoon/q1000/Q2589.java 바다와 섬의 정보가 주어진다 섬들 중 최단거리로 이동했을 때, 가장 거리가 먼 2섬이 보물섬이 된다. 이 때 보물섬이 되는 섬들의 거리를 구하여라. 처음 생각두 섬의 최단거리를 구해야한다. 따라서 BFS를 이용해서 탐색을 진행하였다. 다음 생각어떤 두 섬이 보물섬이 될지 모르므로 모든 섬에 대해서 거리를 따져주었다.▶ 입력 받은 배열을 탐색하면서 섬 표시이 L이 보이면 그 L부터 BFS를 시작하여 거리를 판단하고, 그 거리를 계속 최대값과 비교하였다.▶ 항상 새로운 BFS를 진행하는것이므로 방문 배열도 항상 초기화 시켜주어야한다. 방안1) Java 풀이..
생각Github - https://github.com/hellojdh/Code/blob/master/src/baekjoon/q10000/Q10799.java 쇠막대기의 정보와 레이저의 정보를 준다. 레이저는 무조건 ()로 표시된다. '('는 쇠막대기의 시작을 ')'는 쇠막대기의 끝을 의미한다. 쇠막대기가 놓아져 있을때 '()' 즉 레이저를 만나면 쇠막대기가 쪼개진다. 쇠막대기와 레이저의 정보를 주었을 때 총 몇 조각의 쇠막대기가 나오는지 구하여라. 처음 생각어디서 풀어본 문제라 생각해서 찾아보니 SW Expert에서 풀어본 문제였다.▶ [SW Expert] 5432. 쇠막대기 자르기 다음 생각문제 분류가 Stack이기도하고, 기존에 풀이는 변수로 관리해주었으므로 이번엔 Stack으로 관리해보았다.▶ 변수..
생각Github - https://github.com/hellojdh/Code/blob/master/src/baekjoon/q1000/Q9012.java 괄호의 짝이 맞는지 판단하여 맞다면 'YES' 맞지 않다면 'NO'를 출력하여라. 처음 생각꼭 Stack으로 풀지 않아도 상관없지만 분류가 Stack으로 되어있으므로 구현하여 풀었다. '('가 들어온다면 push를 ')'가 들어온다면 pop을 해주었다. ')'가 들어왔을 때 Stack의 size가 0이면 짝이 맞지 않는걸로 판단하였다.▶ 모든 기능이 필요한게 아니므로 push, pop, size만 구현하였다. 방안1) Java 풀이 12345678910111213141516171819202122232425262728293031323334353637383..
생각주어진 a와 b를 더한 값을 출력한다. a b는 a,b 형태로 주어진다. 처음 생각Java에서는 splite(",")을 이용하여 접근할 수 있었다. C++에서는 getline()을 이용해서 cin의 종료시점을 ,로 정해줄 수 있다.▶ getline(cin,a,',');를 통해서 ','를 만나면 입력을 종료시킬 수 있다.▶ 원래 getline()은 \n를 만나면 종료되기 때문에 b의 입력은 getline(cin,b)로 받아올 수 있다. 다음 생각string으로 받은 값을 int형으로 변환시켜 주어야한다. C++은 string일 경우 stoi(value)를 통해서 string을 int형으로 변환 시킬 수 있다.▶ Java는 Integer.parseInt(value)를 이용하였다. 방안1) 구분자를 이용한..
생각입력으로 주어진 a와 b를 더한 값인 a+b를 출력한다. 처음 생각C++을 공부하면서 cin에 대한 내용을 위해 글을 썼습니다. Java의 경우는 Scanner의 다음 읽을것이 있나를 따져주는 hasNext()를 통해 입력의 끝을 알 수 있었지만 C++의 경우는 어떻게 해야할까 생각을 해보다 답을 보았습니다.▶ C++의 경우 반복문이 positive값이 들어가면 true로 판단을 해주기 때문에 반복문 조건을 cin>>a>>b;로 넣어주면 값이 있을경우만 반복문이 작동하게 됩니다. 방안1) Java 풀이 123456789101112import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new..
생각Github - https://github.com/hellojdh/Code/blob/master/src/baekjoon/q1000/Q2839.java N을 준다. 3kg과 5kg의 설탕 봉지를 이용해서 N을 만들 때 최소의 개수를 사용하는 경우를 구하여라. N을 만들 수 없을 경우 -1을 출력한다. 처음 생각이전에 풀어본것 같아서 검색을 해보니 풀어본 적이 있긴했었다. 보지는 않고 푼 후 비교를 해보니 접근 방식이 달리지긴 했다.([알고리즘/백준] - [문제] 백준 2839번(설탕 배달))▶ 이전엔 그리디 적으로 수식으로 접근했었다. 다음 생각이번에는 DP로 접근해서 풀이를 했다. N까지 접근을 하면서 3kg 짜리로 N에 접근할 수 있는 N-3에서의 값과 5kg 짜리로 N에 접근할 수 있는 N-5에서..
생각Github - https://github.com/hellojdh/Code/blob/master/src/baekjoon/q1000/Q1700.java 멀티탭의 꼿을 수 있는 개수와 사용되어야할 기기가 순서대로 주어진다. 멀티탭에서 제품을 뽑는것을 최소화 할 때, 몇 번 뽑아야하는지 출력하여라. 처음 생각콘센트의 꼽을 수 있는 수도 100개 꼽는 기기의 수도 최대 100개이다. 수가 작으므로 다 살펴보면서 진행을 하였다.▶ 현재 꼿혀있는데 똑같은게 들어올 경우는 바로 다음 기기를 봐도 상관없으므로 HashSet을 이용해서 꼿힌 기기들을 관리해 주었다. 다음 생각꼿혀있지 않을경우 2가지로 나눠진다. 1) 콘센트에 자리가 없을경우 2) 콘센트에 자리가 있을경우 로 나눠진다.▶ 1)의 경우는 HashSet에..
생각Github - https://github.com/hellojdh/Code/blob/master/src/baekjoon/q10000/Q11000.kt 최소한의 강의실로 모든 강의를 들을 수 있도록 하여라. 강의실의 수업이 끝나자마자 바로 다음 강의를 시작할 수 있다. 처음 생각이전에 풀어본 [백준] 1931번 회의실배정 보다 살짝 어려워졌다. 접근은 비슷한 방식으로 진행하지만 처리를 해주어야하는 부분에 있어서 고민을 조금 하였다.▶ 회의실 배정처럼 한 개의 방이아닌 다양한 방을 처리해 주어야하므로 일찍 끝나는 회의실을 우선적으로 처리를 해주었고, 끝나는 시간이 같을 경우에는 시작 시간이 빠른 순서대로 처리를 해주었다. 다음 생각하나의 방이 사용중이면 새로운 방을 늘려주어야한다. List를 가지고 구현..
생각Github - https://github.com/hellojdh/Code/blob/master/src/baekjoon/q1000/Q1931.kt 회의실을 최대한 많이 사용할 수 있는 경우의 수를 출력하여라. 회의실의 끝나는 시간에 바로 다음 강의를 시작할 수 있다. 처음 생각최대한 많이 회의를 많이 할 수 있는 경우를 따져봐야한다. 최대한 따져보라는 말을 토대로 그리디적인 접근을 해볼 필요가 있다.▶ 회의를 많이 해야하므로, 끝나는 시간이 빠른 회의먼저 회의를 하면된다. 다음 생각회의를 끝나는 순서대로 정렬해준 후, 빠른 순서대로 회의장을 사용하도록 하였더니 틀렸습니다가 나왔다. 같은 시간에 끝난 경우를 염두해 두지 않았기 때문이다.▶ 회의가 같은 시간에 끝날 경우는 시작시간에 빠른 순서대로 넣어준..
생각Github - https://github.com/hellojdh/Code/blob/master/src/baekjoon/q10000/Q11047.kt 동전 금액과 목표 금액이 주어진다. 최소한의 동전으로 해당 목표 금액을 만들 수 있을 때, 최소한의 동전 수를 출력하여라. 처음 생각동전을 최소한으로 사용해야 하므로 큰 동전부터 우선적으로 사용을 해나가면 된다.▶ 해당 금액으로 몫과 나머지를 따져도 되지만 큰 동전부터 뺄수있는 만큼 빼나가면서 진행을 하였다. 다음 생각동전수가 세세하게 주어졌기 때문에 그리디 적인 풀이로도 풀이가 가능하다. 만약 동전이 띄엄띄엄 주어졌으면 DFS나 BFS를 통해 풀이를 해야할 것이다. 방안1) Java 풀이(몫과 나머지 이용) 123456789101112131415161..
- Total
- Today
- Yesterday