Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 자바
- 스파르타내일배움캠프
- Spring
- 내일배움캠프
- MySQL
- java
- Flutter
- 스파르타내일배움캠프TIL
- 개발자스터디
- 운영체제
- 99일지
- 항해
- 코딩테스트
- AWS
- 개발자블로그
- 스파르타코딩클럽
- 개인공부
- 중심사회
- til
- wil
- 컴퓨터개론
- 국비
- 프로그래머스
- 99클럽
- 부트캠프
- Python
- 소프트웨어
- 컴퓨터구조론 5판
- 스파르타내일배움캠프WIL
- 백준
Archives
- Today
- Total
컴공생의 발자취
깊이 우선 탐색(DFS: Depth-First Search) 및 프로그래머스(모음사전) 본문
728x90
반응형
💡 오늘의 학습 키워드
- 깊이 우선 탐색(DFS: Depth-First Search)
- 프로그래머스
* 모음사전 : 미들러 문제(Level 2)
깊이 우선 탐색(DFS: Depth-First Search)
: 한 정점으로부터 시작하여 가능한한 깊이까지 탐색을 진행하고, 더 이상 진행할 수 없는 경우 다음 경로로 되돌아가는 방식이다. 이를 통해 미로 찾기와 같은 문제를 해결할 수 있다.
- 재귀 또는 스택을 활용해 구현 가능
- 깊이 우선 탐색
- 비순환 그래프에서는 모든 노드를 방문 가능
- 순환 그래프에서는 무한 루프에 빠질 수 있으므로, 이미 방문한 노드를 추적하여 방문하지 않도록 주의
- 스택의 용량에 따라 메모리 사용량이 증가
public class Main {
// 방문처리에 사용 할 배열선언
static boolean[] vistied = new boolean[9];
// 그림예시 그래프의 연결상태를 2차원 배열로 표현
// 인덱스가 각각의 노드번호가 될 수 있게 0번인덱스는 아무것도 없는 상태라고 생각하시면됩니다.
static int[][] graph = {{}, {2,3,8}, {1,6,8}, {1,5}, {5,7}, {3,4,7}, {2}, {4,5}, {1,2}};
public static void main(String[] args) {
dfs(1);
}
static void dfs(int nodeIndex) {
// 방문 처리
vistied[nodeIndex] = true;
// 방문 노드 출력
System.out.print(nodeIndex + " -> ");
// 방문한 노드에 인접한 노드 찾기
for (int node : graph[nodeIndex]) {
// 인접한 노드가 방문한 적이 없다면 DFS 수행
if(!vistied[node]) {
dfs(node);
}
}
}
}
* 코드 참고 사이트
오늘의 회고
문제1 : [모음사전]
- 어떤 문제가 있었고, 나는 어떤 시도를 했는지
문자 'A', 'E', 'I', 'O', 'U'만 존재하는 문자열이 있을 때, 입력받은 문자열은 몇 번째 순서인지 출력하는 문제였다.
처음에는 순서가 어떻게 증가되는지 다 방법을 알아볼까 싶었지만,
그렇게 하면 시간낭비가 크고 제대로된 공부가 되지 않을 것 같아서 30분의 시간을 정해두고 다시 해결방법을 찾았다.
하지만, 30분이 지나도 해결방안을 찾지 못해 다른사람들의 풀이를 찾아봤다.
찾아본 결과 대부분이 dfs를 사용해서 풀이했다.
- 어떻게 해결했는지(다른사람의 풀이1)
class Solution {
static int idx = 0;
static int answer = -1;
public int solution(String word) {
dfs(word, "");
return answer;
}
public void dfs(String word, String text) {
if(answer > 0) return;
if(word.equals(text)) {
answer=idx;
}
idx++;
if(text.length()==5) {
return;
}
dfs(word, text+"A");
dfs(word, text+"E");
dfs(word, text+"I");
dfs(word, text+"O");
dfs(word, text+"U");
}
}
* 코드 참고 사이트
- 무엇을 새롭게 알았는지
오늘 우테캠 1차 코테를 참여했다가 비기너만 풀이해서는 진전이 없을 것 같아서 미들러 문제를 풀이하기 시작했다.
하지만 갑자기 비기너에서 미들러를 풀기에는 아직 부족한 점이 많았다.
각종 알고리즘과 자료구조의 개념에 대해 다시 배우고 이를 문제에 응용하는 걸 많은 문제를 풀이하며 배워야겠다고 생각했다. 특히나 문제 응용력이 많이 부족한 것 같다고 생각했다. 다시 배우며 정리해 나갈 생각이다...
지금보다 더 많은 노력이 필요할 것 같다.....
내일 학습할 것은 무엇인지 (최대 3개)
- 정보처리기사 실기
- 자바 형변환 정리
- DFS/BFS 정리
- 클럽99 코딩테스트(미들러)
728x90
반응형
'💡 코테' 카테고리의 다른 글
프로그래머스(개인정보 수집 유효기간) (0) | 2024.04.15 |
---|---|
프로그래머스(JadenCase 문자열 만들기) (0) | 2024.04.14 |
프로그래머스(2016년) (0) | 2024.04.12 |
프로그래머스(가운데 글자 가져오기 및 콜라 문제) (0) | 2024.04.11 |
특정범위 배열복사 및 프로그래머스(K번째수와 덧칠하기 문제) (0) | 2024.04.10 |