일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 자료구조
- 백준
- OS
- programmers
- 프로젝트
- BFS
- DFS
- java
- back-end
- baekjoon
- LEVEL2
- 알고리즘
- 그래프
- 자바
- Brute-force
- Spring
- 코틀린
- lambda
- Java8
- 네트워크
- TDD
- 스프링
- backtracking
- DP
- 운영체제
- 모던자바
- algorithm
- 프로그래머스
- 백트래킹
- kotlin
- Today
- Total
목록프로그래머스 (24)
요깨비's LAB
import java.util.* class Solution { var result:Int = 0 fun solution(board: Array, moves: IntArray): Int { val basket = Stack() for (col in moves) { catchDoll(board, basket, col-1) } return result } private fun catchDoll(board: Array, basket: Stack, col: Int) { val rowSize = board.size-1 for(row:Int in 0..rowSize) { if(board[row][col] == 0) { continue }else { insertToBasket(basket, board[row][col..
하나의 양팔 저울을 이용하여 물건의 무게를 측정하려고 합니다. 이 저울의 양팔의 끝에는 물건이나 추를 올려놓는 접시가 달려 있고, 양팔의 길이는 같습니다. 또한, 저울의 한쪽에는 저울추들만 놓을 수 있고, 다른 쪽에는 무게를 측정하려는 물건만 올려놓을 수 있습니다. 저울추가 담긴 배열 weight가 매개변수로 주어질 때, 이 추들로 측정할 수 없는 양의 정수 무게 중 최솟값을 return 하도록 solution 함수를 작성해주세요. 예를 들어, 무게가 각각 [3, 1, 6, 2, 7, 30, 1]인 7개의 저울추를 주어졌을 때, 이 추들로 측정할 수 없는 양의 정수 무게 중 최솟값은 21입니다. 제한 사항 저울추의 개수는 1개 이상 10,000개 이하입니다. 각 추의 무게는 1 이상 1,000,000 이..
재귀를 이용하여 Top-Down이 아닌 Bottom-Up 방식으로 문제를 풀었습니다. 그 이유는, Top-Down으로 풀었을 경우에는 풀었던 문제를 다시 풀어야 하는 비효율이 존재하기 때문에 효율을 생각해서 Bottom-Up 방식으로 풀었습니다. Bottom-Up으로 바꾸니까 이 문제에 한해서 DP가 되버린 것 같기도 하네요 class Solution { int[] dp; public int solution(int n) { int answer = 0; dp = new int[n+1]; dp[0] = 0; dp[1] = 1; if(n == 1) { answer = 1; }else { pibo(2,dp[0],dp[1],n); } answer = dp[n]; return answer; } public void..
[ 문제 ] 땅따먹기 게임을 하려고 합니다. 땅따먹기 게임의 땅(land)은 총 N행 4열로 이루어져 있고, 모든 칸에는 점수가 쓰여 있습니다. 1행부터 땅을 밟으며 한 행씩 내려올 때, 각 행의 4칸 중 한 칸만 밟으면서 내려와야 합니다. 단, 땅따먹기 게임에는 한 행씩 내려올 때, 같은 열을 연속해서 밟을 수 없는 특수 규칙이 있습니다. 예를 들면, | 1 | 2 | 3 | 5 | | 5 | 6 | 7 | 8 | | 4 | 3 | 2 | 1 | 로 땅이 주어졌다면, 1행에서 네번째 칸 (5)를 밟았으면, 2행의 네번째 칸 (8)은 밟을 수 없습니다. 마지막 행까지 모두 내려왔을 때, 얻을 수 있는 점수의 최대값을 return하는 solution 함수를 완성해 주세요. 위 예의 경우, 1행의 네번째 칸..
Stack을 이용하여 해결하였습니다. 1. 괄호를 한개 읽어온다. 2. (1) '('인 경우 Stack에 PUSH (2) ')'인 경우 Stack Size가 0이면 false / 0보다 크면 POP 1번으로 회귀 3. 모든 괄호를 읽었으면 Stack을 체크해서 Stack이 다 비어있으면 올바른 괄호이므로 TRUE 스택이 비어있지 않으면 ')'의 갯수보다 '('의 갯수가 많은 것이므로 FALSE import java.util.Stack; class Solution { static Stack stack = new Stack(); boolean solution(String s) { char[] carr = s.toCharArray(); int carrLen = carr.length; for (int i = 0..
처음 아이디어는 n을 이진수로 변환하여 저장하고 n+1의 값들을 이진수로 변환하여 이진수끼리 비교하여 1의 개수가 같은지를 비교하려했습니다. 하지만 이것은 값이 매우 커졌을때 매번 이진수 길이만큼 Brute-Force를 수행하기 때문에 시도하기 전에 답이 없겠다는 판단을 했습니다. 그래서 두번째 아이디어로 n의 값을 DFS연산을 하여 n%2, n/2를 이용하여 1인 경우만 체크하여 1의 개수를 count하여 저장. n의 값을 1씩 증가하여 똑같은 DFS연산을 수행한 count값이 n의 count값이 같은지를 비교하여 같으면 연산을 멈추고 답을 출력하는 방식으로 하였습니다. class Solution { public int solution(int n) { int answer = 0; int count = ..
저의 DFS로 풀려는 아이디어로는 시간 초과와 1000 이상의 값에서는 절대 돌아가지 않을 것 같다는 판단에 다른 분들의 아이디어를 보고 이해한 후에 배껴서 풀었습니다. 아이디어 잘 생각 하시는 분들 보면 정말 부럽... 하지만 재능이 나무에서 뚝 떨어지신 분들도 많겠지만 저에게는 그러한 재능이 없기에.. 꾸준히 높이 뛰기해서 쟁취해야겠죠 잡설이 길었습니다. 조건 두 개를 주었습니다. 표의 가로나 세로 크기가 1일 경우 => 이 경우, 정사각형의 원리에 의해 1인 값이 하나라도 있으면 넓이는 1일 수 밖에 없습니다. 모두 0 이면 당연히 0을 출력하겠죠 가로 세로 모두 2 이상일 경우, 1,1에서 부터 시작한다. => 정사각형의 한변의 크기를 구하는 원리에 의해 출처: https://blog.sonim1..
위 문제는 자바 컬렉션인 Map을 활용하여 해결하였습니다. 옷의 종류를 Key값으로, 각 옷들을 Key값의 List배열에 담아주었습니다. 아래는 코드입니다. import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; class Solution { HashMap clothMap; int result = 1; public int solution(String[][] clothes) { clothMap = new HashMap(); ArrayList clothList; for (int i = 0; i < clothes.length; i++) { // clothMap.putIfAbsent(clothes[i][0], new Arr..