7주차 (07월 29일)
목표
- 원래 웹프로그래밍 하는 날이지만 강의를 다 들어서 오늘 알고리즘 공부를 하고, 8주차에 웹프로그래밍 공부를 할 예정
- <트리, BFS/DFS> 자료구조 복습
- 복습 후 <트리, BFS/DFS> 알고리즘 문제 2~3개 풀기(난이도 : 실버4 이상)
회고
- 알고리즘
문제 : 백준 7576번 (난이도 : 실버1)
해결 방법 : 익은 토마토를 큐에 넣은 후에 하나씩 빼서 상하좌우의 토마토를 익힌 후 익힌 토마토를 큐에 넣는다.
코드일부
int[] x = {-1, 1, 0, 0};
int[] y = {0, 0, -1, 1};
int finalday = 0;
while(!q.isEmpty()) {
Tomato t = q.poll();
for(int i = 0; i < 4; i++) {
int newx = t.x + x[i];
int newy = t.y + y[i];
if(newx >= 0 && newx < n && newy >= 0 && newy < m && visit[newx][newy] == false) {
q.add(new Tomato(newx, newy, t.day + 1));
tomato[newx][newy] = 1;
visit[newx][newy] = true;
}
}
if(finalday < t.day) {
finalday = t.day;
}
}
- 알고리즘
문제 : 백준 2178번 (난이도 : 실버1)
해결 방법 : 위의 토마토 문제와 마찬가지로 시작점을 큐에 넣은 후에 하나씩 빼서 갈 수 있는 길일 경우 몇번만에 갈 수 있는지를 길에 저장하고 큐에 넣는다. 도착점의 저장되어 있는 값을 출력한다.
코드일부
int[] x = {-1, 1, 0, 0};
int[] y = {0, 0, -1, 1};
while(!q.isEmpty()) {
Point p = q.poll();
for(int i = 0; i < 4; i++) {
int newx = p.x + x[i];
int newy = p.y + y[i];
if(newx >= 0 && newx < n && newy >= 0 && newy < m && visit[newx][newy] == false && maze[newx][newy] == 1) {
q.add(new Point(newx, newy));
visit[newx][newy] = true;
maze[newx][newy] = maze[p.x][p.y] + 1;
}
}
}
System.out.println(maze[n-1][m-1]);
- 알고리즘 문제 : 백준 1068번 (난이도 : 실버1)
모각코 시간안에 풀지 못해서 다음 모각코 전까지 풀어와야겠다.
- 다음 마지막 모각코 때 웹프로그래밍 공부 할 것을 찾아와야겠다.