일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Spring
- Dependency Injection
- table tag
- DI
- Django 특정 값 가져오기
- html cell size
- html cell
- html
- Django
- table cell size
- Django column 값 가져오기
- Dependency
- Today
- Total
emluy 개발 일기
C++ - (백준) 13460번 구슬 탈출 2 본문
13460번: 구슬 탈출 2
첫 번째 줄에는 보드의 세로, 가로 크기를 의미하는 두 정수 N, M (3 ≤ N, M ≤ 10)이 주어진다. 다음 N개의 줄에 보드의 모양을 나타내는 길이 M의 문자열이 주어진다. 이 문자열은 '.', '#', 'O', 'R', 'B'
www.acmicpc.net
// 기울이면 공이 벽 만날때까지 쭉 미끄러져 내려감
// 필요한 변수 : R과 B의 위치, 몇번만에 0로 나갔는지 셀 count
// #이 아닌 .인곳으로 계속 감. #만나기전까지 쭉 감
0. 전체 코드
github.com/ImYurim/Algorithm/blob/main/%EA%B5%AC%EC%8A%AC%ED%83%88%EC%B6%9C2.cpp
ImYurim/Algorithm
Contribute to ImYurim/Algorithm development by creating an account on GitHub.
github.com
1. 알아야하는 것
- BFS
- queue library 사용법 : queue 와 구조체 같이 사용하는 법
hydroponicglass.tistory.com/15
[C++, STL] 큐에서 구조체 사용
다른 글 [C++, STL] 알고리즘 문제풀이를 위한 큐(queue) 목적 C++의 STL을 이용하여 queue에서 struct를 사용하고 싶다. 본론 예 : 큐에 좌표를 집어넣고 싶다. 구조체 정의 typedef struct { int x; int y; int..
hydroponicglass.tistory.com
- 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/
scanf()에서 공백 스킵하기
종종 문제에서 입력을 받을 때 공백을 무시해야 하는 경우가 있다.숫자만 읽어들이는 경우 scanf("%d", &var)과 같이 처리할 수 있지만,문자도 읽어야 하는 경우 공백 문자도 문자로 취급되어 귀찮아
norang.io
'알고리즘 > 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 |