생각Github - https://github.com/hellojdh/Code/tree/master/src/baekjoon/q2000 9명의 난쟁이의 키가 주어진다. 7곱 난쟁이의 키의 크기의 합은 100이다. 이 때, 7곱 난쟁이가 될 수 있는 난쟁이들의 키를 오름차순으로 출력하여라. 처음 생각이렇게 여러개의 조건에서 서로 다른 n개를 택하는 조합의 경우 풀이 방법은 3가지가 있다. 1) 반복문을 통한 완전 탐색 2) 재귀를 통한 완전 탐색 3) 비트 마스크를 통한 완전 탐색 다음 생각반복문을 통한 완전 탐색에 대해 알아보면, n개를 택하면 되므로 n개의 반복문이 필요하다 따라서 이문제와 같이 7개를 택해야하는 경우에는 적절하지 않다고 볼 수 있다.▶ 실제로 4개 정도까지는 for문으로 구현을 하는게 ..
생각체스에서 비숍은 대각선으로 만 이동할 수 있다. 체스판과 비숍을 놓을 수 있는 위치(1)가 주어질 때, 가장 많은 비숍을 놓을 수 있는 수를 구하시오 처음 생각맵에서 비숍을 가장 많이 놓아야하는 문제이므로 DFS를 진행하면서 안 될 경우 백트래킹을 진행하면 된다고 생각하였다. 다음 생각비숍을 놓을 수도 안 놓을 수도있는 자리가 1로 주어지고 아예 못놓는 자리가 0으로 주어지는데 반대로 생각해서 틀렸습니다를 얻었다. 다다음 생각다시 1과 0의 판단을 바꿔준 후, 제출하였지만 시간 초과를 얻었다. 우선 시간 초과를 해결해보기위해서 기존의 배열을 다보는 형식을 처음에 입력 받을 때 놓을 수 있는 위치만 List에 좌표값을 넣어주어 놓을 수 없는 위치는 배제하고 살펴보았다.▶ 좌,우 상향 대각선만 보면 되므..
생각대략 위의 그림과 같이 생긴 성곽이 있다. 굵은 선은 벽을 나타내고, 점선은 벽이 없어서 지나다닐 수 있는 통로를 나타낸다. 이러한 형태의 성의 지도를 입력받아서 다음을 계산하는 프로그램을 작성하시오. 처음 생각기존에 보던 미로 찾기와 다르게 방에대해서 벽의 조건을 주는 문제이다. 따라서 방 마다 상 하 좌 우로 갈 수 있는지 알아내기 위해서 Pair class를 만들어서 사용하였다. 다음 생각또 특이하게 갈 수 있는 길을 그냥 주지 않고 각각 1 2 4 8의 값을 매겨 더한 값을 준다. 문제에 힌트로 이진수라 생각하면 편하다 되어있으므로 수를 받아서 이를 이진수로 변환하여 갈 수 있는길 아닌길을 판단해 주었다. 다다음 생각우선 조건들 받기를 성공했다면 탐색을 통해서 1) 방의 개수 와 2) 제일 큰..
생각로봇 청소기가 있다. 이 로봇 청소기는 아래와 같은 연산으로 청소를 진행한다. 청소를 하지 않은 지역은 '0' 벽은 '1'로 표신된다. 1. 현재 위치를 청소한다. 2. 현재 위치에서 현재 방향을 기준으로 왼쪽방향부터 차례대로 탐색을 진행한다. 1) 왼쪽 방향에 아직 청소하지 않은 공간이 존재한다면, 그 방향으로 회전한 다음 한 칸을 전진하고 1번부터 진행한다. 2) 왼쪽 방향에 청소할 공간이 없다면, 그 방향으로 회전하고 2번으로 돌아간다. 3) 네 방향 모두 청소가 이미 되어있거나 벽인 경우에는, 바라보는 방향을 유지한 채로 한 칸 후진을 하고 2번으로 돌아간다. 4) 네 방향 모두 청소가 이미 되어있거나 벽이면서, 뒤쪽 방향이 벽이라 후진도 할 수 없는 경우에는 작동을 멈춘다. 이 때 로봇 청소..
생각금액이 다른 동전 N개와 원하는 금액 K가 주어진다. N개의 동전들을 최소한으로 사용하여 K를 만들 때 그 최소한의 동전수를 출력하여라. 만들 수 없을 경우 -1을 출력한다. 처음 생각DFS를 통해 풀이를 하였으나 시간 초과가 나왔다. 다음 생각이런 동전류의 문제는 이전 값을 계산해서 나아가는 다이나믹 프로그래밍(DP) 방식을 사용해서 푸는 경우가 많으므로 DP로 접근하였다. 다다음 생각동전의 숫자를 구하는 것이므로 이 금액을 만들 수 있나의 개수를 파악하면서 가는것이 아닌 이 금액을 몇 개의 동전으로 만들 수 있나를 파악하면서 가도록 진행하였다. 자세한 설명은 코드상에 주석으로 달아 놓았습니다.다다다음 생각따라서 DP를 구하기에 앞서 DP에 해당 Index 1~K 일 때, 주어진 동전의 배수를 미리..
생각주어진 예제는 다음과 같다빈 칸은 '.'로 짐이 있는 칸은 'X'로 주어진다. 빈 칸이 두칸 이상 연결되어 있으면 누울 곳이 된다. 위의 경우 가로로 누울곳은 5곳 세로로 누울곳은 4곳이 되므로 5 4 를 출력한다. 처음 생각그대로 조건을 탐색하여 풀이를 하였더니 '틀렸습니다'가 나왔다. 다음 생각짐 칸을 기준으로 새로운 누울곳이 있다면 그곳도 누울곳으로 추가될 수 있었다.문제에서 좀 더 친절하게 "누울곳은 짐칸으로 구분 될 수 있다" 같은 언급을 해주었으면 좋았을 것 같다. 방안1) boolean형 flag 변수를 선언하여 '.'이 두개가 연속되어있으면 누울곳으로 판단해 flag를 false로 바꿔준다.('.'이 짐을 만나기 전에 연속해서 있으면 그 자리는 1개로 쳐야하므로)2) 탐색중 짐을 만나면..
생각단어가 주어지면 해당 단어에서 CAMBRIDGE가 포함된 알파벳을 빼고 출력하여라. 처음 생각해당 단어가 들어있는지 판단해야 하므로 charAt() 메소드를 통해 하나씩 확인하였다. 다음 생각if문 보다 Switch 문이 보기가 더 깔끔하여 switch 문을 택하였다. 방안1) 해당하는 알파벳을 제외한 알파벳을 switch문의 default를 이용하여 출력해주었다. 123456789101112131415161718192021222324252627import java.io.IOException;import java.util.Scanner; public class Main{ public static void main(String[] args) throws IOException{ Scanner sc = n..
1) 생각 4개의 정류장이 주어지고 각 정류장마다 탄사람과 내린사람이 주어진다. 이 때, 탑승 인원이 가장 많을 때를 출력하여라. 처음 생각각 정류장 별로 탄사람과 내린사람 수가 주어지므로 전체 탑승 인원에서 탄사람은 + 내린 사람은 -를 해준다. 2) 방안 1) 입력이 적어 Scanner를 사용하였다. 1234567891011121314151617import java.io.IOException;import java.util.Scanner; public class Main { public static void main(String[] args) throws IOException { Scanner sc = new Scanner(System.in); int inner = 0; int result = 0; f..
1) 생각 입력으로 주어지는 명령을 처리하는 스택을 구현하여라. 처음 생각Java에서 제공해주는 Stack을 써서 풀어볼까 하다가 "구현하여라"라고 적혀있어서 직접 만들어 보았다. 2) 방안 1) Stack class와 inner class로 data class를 만들어서 push 명령어가 들어오면 해당 data 객체의 다음 객체로 이전 객체의 주소를 지정해준다. 코드로 보면 이해하기가 말보다 좋다. 2) Size에 대한 부분은 Stack Class의 Field 영역에 선언하여 push 명령일 때는 +1 pop 명령일 때는 -1 해줌으로서 간단히 하였다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464..
1) 생각 양방향 그래프에서 DFS(깊이 우선 탐색)과 BFS(넓이 우선 탐색)을 진행하여라. 처음 생각DFS를 Stack으로 구현을 해보았고 재귀를 통해서도 구현을 하였다. 다음 생각BFS를 Queue를 사용하여 구현을 하였다. 다다음 생각DFS를 수행한 후 방문 배열 초기화를 해주지 않아 BFS값이 제대로 출력이 안됐었다.2) 방안 1) DFS를 수행한 다음 BFS를 수행하기전 방문배열 초기화를 해주었다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475import java.io.BufferedRea..
- Total
- Today
- Yesterday