일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Django column 값 가져오기
- Spring
- DI
- Django 특정 값 가져오기
- html
- html cell
- html cell size
- Dependency Injection
- Django
- table tag
- Dependency
- table cell size
- Today
- Total
emluy 개발 일기
C++ - (백준) 13460번 구슬 탈출 2 본문
// 기울이면 공이 벽 만날때까지 쭉 미끄러져 내려감
// 필요한 변수 : R과 B의 위치, 몇번만에 0로 나갔는지 셀 count
// #이 아닌 .인곳으로 계속 감. #만나기전까지 쭉 감
0. 전체 코드
github.com/ImYurim/Algorithm/blob/main/%EA%B5%AC%EC%8A%AC%ED%83%88%EC%B6%9C2.cpp
1. 알아야하는 것
- BFS
- queue library 사용법 : queue 와 구조체 같이 사용하는 법
hydroponicglass.tistory.com/15
- scanf로 한줄씩 입력받기 : scanf는 엔터는 자동 무시한다.
2. idea
- queue에 들어가고 방문 표시 대상이 되는 애 : 빨간공, 파란공이 방문한 x,y 좌표
-> 맵의 각 점이 방문 표시 대상이 되는거 아님!! 주의
3. 작성해야할 코드
- struct : 빨간공, 파란공이 있던 위치와 각 위치마다 몇번째 이동인지 기록 위함
- bfs 함수
- main 함수 : 보드의 가로, 세로 길이
3-1. 작성 순서
1) struct 선언
2) main 함수
- 보드게임 가로 세로인 n.m 입력받기
- 보드게임 판 구성 입력받기 (2차원 배열 입력)
- 처음 빨간공과 파란공이 위치한 좌표와 depth(0) 을 queue에 push
3) bfs 함수
- queue가 비어있기 전까지 계속 반복되는 while문
- queue에서 pop한 후 빨간공 파란공이 위치한 좌표 가져옴
- 빨간 파란공이 그 다음위치에 갈 곳을 4방향 모두 찾음 (for문으로) -> 각 방향으로 이동하기 위한 +1 -1 0 으로 이루어진 dx, dy 배열 필요
- 빨간공 따로 파란공 따로 한방향에 대해 다음 위치가 될 곳의 좌표를 가져옴 (움직이기 전좌표와 따로 다뤄지게 새로운 변수 선언 필요, move함수 필요)
4) move 함수
- 각 공의 좌표와 빨간공 파란공 겹치는걸 대비해서 선언해준 변수와 방향 값 을 인자로 하는 함수
- 여기서는 한 칸씩 움직임!
- while문 작성, 조건은 한 칸씩 한 방향으로 움직일때 다음 위치가 벽이거나 한 칸씩 움직이다가 현재 위치가 구멍자리가 되면 함수종료
5) 다시 bfs 함수
- 파란공이 구멍으로 빠지거나 빨간공이 구멍으로 빠지거나 두 공이 겹칠때 3가지 경우를 if문으로 처리해줌
4. 주의
4-1. 문법상 주의
- scanf("%1s",&map[i][j]) 변수에 주소 '&' 꼭 빼먹지 말것! why? char 한글자씩 입력하는 것이기때문에 &꼭 필요함
- queue와 구조체 같이 사용할 시, q.push 할때 괄호 안에 중괄호 넣어주기 ex) q.push({x,y,z})
4-2. 코드 흐름 상 주의
- move함수에서 while문 조건 두번째는 map[a_x+dx][a_y+dy] !='0' 이 아니라 map[a_x][a_y] !='0' 이다!!
-> 왜냐면? 다음 위치에 공이 벽에 부딪힐거같으면 그만 움직이고 move함수 종료지만 다음 위치가 0이어도 구멍으로 빠져나간후 move종료다!!
=========================================================
그 외 궁금했던 것
- 공백과 엔터 제외하고 scanf로 입력 받기
: scanf("%*[ \n]%c", &k); ->%*사용해서 공백과 엔터 입력 무시 처리
norang.io/cpp/skip-whitespace/
'알고리즘 > c, c++' 카테고리의 다른 글
C++ - vector<string> 복사 & cout 으로 출력 (0) | 2020.10.16 |
---|---|
C++ - (프로그래머스) 단어변환 (0) | 2020.10.16 |
DFS, BFS 정리 (0) | 2020.10.16 |
C++ - (백준) 14499번 주사위 굴리기 (0) | 2020.10.10 |
C++ - (백준) 16236번 아기상어 (0) | 2020.10.09 |