반응형
https://www.acmicpc.net/problem/1952
구현문제였습니다.
📕 풀이방법
📔 입력 및 초기화
1행 1열부터 시작한다는 의미로 curR = 1, curC = 1로 저장합니다. 이 후 지나온 길을 다시가지 않기 위해 2차원 배열 ck를 선언합니다.
📔 풀이과정
그리기가 끝나는 시점은 방향을 바꾼 후 그 방향으로 갔을 때에도 이미 그린 선인 경우입니다.
1. 현재방향 dir에 대해 curR, curC를 갱신합니다.
2. 벽에 부딪히거나 이미 그린 선이라면 갱신했던 curR, curC를 무르고 방향을 바꿔준 후 정답을 출력할 변수 cnt++해줍니다.
3. 방향을 바꿨는데도 이미 그린 선이라면 break해줍니다.
📔 정답출력
cnt를 출력합니다.
📕 Code
#include <bits/stdc++.h>
using namespace std;
int n, m, dir, cnt, curR = 1, curC = 1;
int ck[101][101];
//우,하,좌,상
int dr[] = {0,1,0,-1};
int dc[] = {1,0,-1,0};
int main(){
cin >> n >> m;
ck[1][1] = 1;
while(1){
curR += dr[dir];
curC += dc[dir];
if(1 > curR || curR > n || 1 > curC || curC > m || ck[curR][curC]){
curR -= dr[dir];
curC -= dc[dir];
dir = (dir + 1) % 4;
if(ck[curR + dr[dir]][curC + dc[dir]]) break;
cnt++;
}
ck[curR][curC] = 1;
}
cout << cnt;
}
'Algorithm > Implementation' 카테고리의 다른 글
(Python) - 백준(BOJ) 20499번 : Darius님 한타 안 함? (0) | 2021.08.22 |
---|---|
(C++) - 프로그래머스(2020 KAKAO BLIND RECRUITMENT) : 괄호 변환 (0) | 2021.08.21 |
(C++) - 백준(BOJ) 17143번 : 낚시왕 (0) | 2021.08.13 |
(C++) - 프로그래머스(위클리 챌린지) : 2주차 (0) | 2021.08.11 |
(Rust) - 백준(BOJ) 1000번 : A + B (0) | 2021.08.10 |