일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 백준
- LEVEL2
- BFS
- 그래프
- lambda
- programmers
- 알고리즘
- Java8
- 자료구조
- baekjoon
- Spring
- 백트래킹
- TDD
- java
- algorithm
- OS
- 코틀린
- back-end
- 네트워크
- 프로그래머스
- 프로젝트
- 운영체제
- 스프링
- 모던자바
- 자바
- kotlin
- DFS
- Brute-force
- DP
- backtracking
- Today
- Total
목록백준 (37)
요깨비's LAB

체스판이라는 것을 명심하고 풀이에 들어가야 합니다. 상하좌우 색깔이 서로 달라야 합니다. 단순하게 한줄에 최적의 경우만 찾아서는 안됩니다. 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. 해당 로직을 마치고 이전 값보다 최소값이면 ..

방향그래프인 것을 생각하고, 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;..

예... 이번 문제도 나름의 아이디어를 써봤으나 메모리 초과로 다른 아이디어로 접근해서 해결했습니다.. 우선 문제 접근 자체는 크게 어렵지 않았습니다. 일단 이전에 제가 실패 했던 아이디어입니다. 첫 번째 문자는 일단 아무거나 다 선택한다. 현재 문자열의 길이가 초기값과 같은지?(완성 여부) 같으면 해당 값이 이미 있는지? 두번째부터 문자를 선택한다 2번째 문자부터 분기 조건을 부여하는데 (1) 바로 직전 문자와 선택한 문자가 같으면 안됨 (2) 이미 방문한 문자 위치면 안됨 2번으로 다시 재귀 실행... 여기에서 2번을 제외하면 그냥 재귀함수랑 기본적인 분기처리를 그대로 따라가면서 짜면 됩니다. 하지만 2번을 구현하기 위해서는 이전에 완성된 문자열을 저장해주는 공간이 필요한데 저는 자료구조의 Set을 ..

이번에도.. 오지게 오래 걸렸습니다... 순수 완벽하게 푼것이 아닌.. 백준 질문하기에서 반례들을 이용하면서 풀었구요.. 아직도 분기 처리 조건 생각하는거랑 로직을 제대로 생각 않하고 무작정 문제에 돌입하는 것... 참 안고쳐집니다. 좀만 풀이가 생각날 것 같으면 무조건 키보드에 손이 올라가는 이 흑우.. 처음 아이디어는 자료구조 Set 2개를 이용해서 DFS를 돌면서 각 방문 노드들을 Set에 넣어주면서 indexSet(첫째 줄 배열)이랑 valueSet(두번째 줄 배열)에 값들을 비교하면서 하려고 했는데 빛 좋은 개살구 마냥 아이디어만 좋았지 실제적으로 제 머리가 그걸 구현할 정도로 호환이 안되더군요.. 다음번에 다시 도전해서 올리겠습니다. 그냥 함수 재귀를 이용해서 풀었습니다. 여기에서 통과 조건은..

어후;; 20번 틀리고 21번째에 드디어 해결했네요... 알고보니 로직은 그럭저럭 맞는것 같았으나 BFS에 대한 공부 부족과 객체 지향 활용을 못한 원인이 가장 컸던 것 같습니다.. 차근차근 어떤 문제 상황에 부딪혔고 해결했는지 끄적여 보겠습니다. 저는 고수분들이랑 다르게 간단하고 명료하게 추상화해서 몇줄 안되는 코드로는 못짜서 코드가 길고 좀 보기 싫습니다.. 그냥 저만의 회고시간입니다.. 클래스 정의 우선 Vertax 클래스를 설계했습니다. class Vertax { private int index; private int color; // -1 색없음, 0 빨 1 파 private HashSet connectedEdges; // 해당 정점과 연결된 정점들을 저장 하기 위한 자료구조 public Ver..