생각Github - https://github.com/hellojdh/Code/blob/master/src/baekjoon/q1000/Q1463.java 다음 3가지 연산을 이용해서 1로 만들 수 있는 최소의 연산 수를 구하여라. 1) 3으로 나눠 떨어진다면 3으로 나눈다. 2) 2로 나눠 떨어진다면 2로 나눈다. 3) 1을 뺀다. 처음 생각생각나는건 2가지 방법이였다. BFS를 이용해서 3개의 연산을 차례로 진행해 나가면서 1로 만들어졌을 때 카운트 변수를 출력하는 방법과 다이나믹 프로그래밍을 이용해서 값을 찾는 방법이였다.▶ 문제 분류가 DP로 되어있으므로 DP 식으로 풀어보았다. 다음 생각생각을 단순히 하면서 접근을 해보자. 1로 만들수 있는 최소 연산 수를 구하는 법이다. Bottom Up 과 T..
생각Github - https://github.com/hellojdh/Code/blob/master/src/baekjoon/q10000/Q16637.java 괄호를 추가하여 식의 최대값을 얻어내라. 괄호 안에는 1개의 연산자만 있을 수 있으며 괄호는 1중으로만 칠 수 있다. 즉, 2중 괄호 이상은 안된다. 연산자의 기호에 상관없이 앞에서부터 연산을 한다. 처음 생각어디서 풍문으로 듣기로는 11월 삼성 SW 역량테스트 A형 문제와 비슷하다고합니다. 다음 생각평범한 식이 주어지면 괄호를 쳐서 최대값이 되도록 만들어야한다. 즉, 식을 계산해 주어야한다.▶ 따라서 숫자와 식을 분리해서 각각의 List에 넣어주었다. ▶ 식은 숫자가 먼저 시작되므로 부호의 i 번째 index는 식의 i+1 번째 index와 연관이..
생각Github - https://github.com/hellojdh/Code/blob/master/src/baekjoon/q1000/Q7569.java 이전 토마토 문제의 확장 문제이다. 상자가 여러겹 쌓여있으며 익은 토마토가 위 아래 상자의 토마토에까지 영향을 끼친다. 처음 생각우선 이전 토마토 문제인 [백준] 7576번 토마토 와 풀이를 똑같이 했다.▶ 다른점이라면 위 아래 상자를 생각해줘야 한다는 것이였다. 다음 생각한 상자를 사용할 때 2차 배열로 표현할 수 있었다. 그럼 문제가 간단해진다. 층을 표현할 위치를 추가해서 3차 배열로 표현을 해주었다.▶ [층][그 층의 토마토 x 위치][그 층의 토마토 y 위치]로 배열을 사용하였다.▶ 기존의 문제에서 배열로 주변 토마토들의 BFS 탐색을 진행하였..
생각Github - https://github.com/hellojdh/Code/blob/master/src/baekjoon/q1000/Q7576.java 토마토가 담겨있는 박스의 상태를 준다. 0은 익지않은 토마토, 1은 익은 토마토, -1은 토마토가 없는 공간을 나타낸다. 익은 토마토의 주변에 익지않은 토마토가 있다면 그 토마토를 하루 뒤에 익게만든다. 이 때, 박스 안의 모든 토마토를 익게 만드는 때까지 걸리는 날짜를 출력하여라. 모든 토마토를 익게만들수 없다면 -1을 출력하여라. 처음 생각익은 토마토(1)을 기준으로 상 하 좌 우 탐색을하고 또 익은 토마토로 인해 익게된 토마토로 부터 탐색을 해나가면서 진행을 해야하므로 4방향 모두를 살피면서 탐색할 수 있는 BFS 탐색을 이용하여 풀었다. 다음 생..
생각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에서..
- Total
- Today
- Yesterday