일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 그래프
- 프로그래머스
- 백준
- 스프링
- BFS
- LEVEL2
- TDD
- DFS
- programmers
- 운영체제
- OS
- 모던자바
- back-end
- kotlin
- java
- Spring
- 알고리즘
- DP
- 프로젝트
- backtracking
- 코틀린
- Java8
- 자료구조
- 네트워크
- Brute-force
- lambda
- baekjoon
- 자바
- 백트래킹
- algorithm
- Today
- Total
목록분류 전체보기 (106)
요깨비's LAB
본 기록은 케빈님의 강의와 "한빛미디어 - 모던 자바 인 액션"을 정리한 내용들입니다. 1. 문제 상황 배열에서 값들을 꺼내서 "element1 : element2 : element3..."의 모양의 문자열로 변환하여 출력하는 코드를 짭니다. 2. Java8 이전 방식의 코드 final List numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); // 기존 final StringBuilder stringBuilder = new StringBuilder(); for (Integer number : numbers) { stringBuilder.append(number).append(" : "); } // 1 : 2 : 3 : 4 : 5 : 6 : 7 : 8 :..
체스판이라는 것을 명심하고 풀이에 들어가야 합니다. 상하좌우 색깔이 서로 달라야 합니다. 단순하게 한줄에 최적의 경우만 찾아서는 안됩니다. 1. 우선 주어진 맵에서 X = 0번째에서 주어진 M 크기 - 8, Y = 0번째에서 주어진 N크기 - 8의 기준을 주어 8*8의 맵을 가져옵니다. 2. y = 0~6(현재위치 ?= 현재위치 + 1) , x = 0으로 먼저 흰/검 값을 정한 뒤에(흰색 시작, 검정색 시작 두가지) y= 0~7번째 마다 map[y][0], map[y][1] .... map[y][6]으로 x에 대한 흰/검 값들을 정해주면서 map[y][x] == map[y][x+1]이면 count 값을 증가 시키고 map[y][x+1]의 값을 바꿔줍니다. 3. 해당 로직을 마치고 이전 값보다 최소값이면 ..
[ 문제 ] 땅따먹기 게임을 하려고 합니다. 땅따먹기 게임의 땅(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 = ..
1. 스트래티지 패턴이란? 모든 프로그램은 문제를 해결하기 위해 작성됩니다. 그리고 문제를 해결하기 위해 특정 알고리즘이 구현돼있습니다. Strategy 패턴에서는 그 알고리즘을 구현한 부분을 모두 교환할 수 있습니다. 정리하면 행위를 클래스로 캡슐화하여 동적으로 행위를 바꿀 수 있게 해주는 패턴 - 같은 문제를 해결하는 여러 알고리즘이 클래스 별로 캡슐화되어 있고 이들이 필요할 때 교체함으로써 동일한 문제를 다른 알고리즘으로 해결하도록 하는 디자인 패턴 즉 전략을 쉽게 바꿀 수 있도록 해주는 디자인 패턴 - Strategy : 어떤 목적을 달성하기 위해 일을 수행하는 방식, 비즈니스 규칙, 알고리즘 등을 의미 특히 게임 개발에서 유닛이 처한 상황에 따라 행동 양식을 바꾸고 싶을때 주로 사용됨 역할 - ..
1. 매개 변수 기본값 (Default Parameter Value) 함수를 호출할 때 매개변수의 개수만큼 인수를 전달하는 것이 일반적이지만 그렇지 않은 경우에도 에러가 발생하지는 않습니다. 함수는 매개변수의 인수의 개수를 체크하지 않습니다. 인수가 부족한 경우, 매개변수의 값은 undefined입니다. function sum(x,y) { return x + y; } console.log(sun(1)); // NaN 따라서 매개변수에 적절한 인수가 전달되었는지 함수 내부에서 확인할 필요가 있습니다. function sum(x, y) { // 매개변수의 값이 falsy value인 경우, 기본값을 할당한다. x = x || 0; y = y || 0; return x + y; } console.log(sum..
방향그래프인 것을 생각하고, DFS를 이용하여 해결하였습니다. 로직은 아래와 같이 생각했습니다. 행렬에 값을 넣을때 1일 경우 해당 위치 값 x,y를 이용하여 Element객체를 만들어 Queue에 넣는다. Queue에서 Element를 하나 꺼낸다. 해당 위치를 Root로 두고 y는 현재 위치 x는 다음 위치로 DFS 연산을 진행한다. -> DFS 연산은 가리키는 곳이 값이 1이면서 방문하지 않은 곳이면 Root의 next 위치에서 다음 next 값들을 1로 바꿔준다.(이동 가능함을 체크한다는 의미) 그렇지 않으면 종료 -> 만약 Root값과 가리키는 값이 같으면 종료. 그려진 맵을 출력 아래에는 코드입니다. import java.util.LinkedList; import java.util.Queue;..