728x90
반응형
https://www.acmicpc.net/problem/14226
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
#include<stdio.h>
#include<iostream>
#include<queue>
using namespace std;
int S;
int chk[1004][1004];
void init() {
cin >> S;
}
struct Data {
int display, copy, cnt;
};
void emoticon() {
queue<Data>q;
q.push({ 1,0,0 });
chk[1][0] = 1;
while (!q.empty()) {
Data c = q.front(); q.pop();
if (c.display == S) {
cout << c.cnt;
return;
}
//화면 복사 클립보드로
if (c.display != 0&& c.display<=1000 && chk[c.display][c.display] == 0) {
chk[c.display][c.display] = 1;
q.push({ c.display,c.display,c.cnt + 1 });
}
//클립보드에 있는것 화면으로
if (c.copy != 0 && c.display + c.copy <= 1000 && chk[c.display + c.copy][c.copy] == 0) {
chk[c.display + c.copy][c.copy] = 1;
q.push({ c.display + c.copy,c.copy,c.cnt + 1 });
}
// 화면에 있는 이모티콘 -1
if (c.display - 1 != 0 && chk[c.display - 1][c.copy] == 0) {
chk[c.display - 1][c.copy] = 1;
q.push({ c.display - 1,c.copy,c.cnt + 1 });
}
q.push(c);
}
}
int main(void) {
init();
emoticon();
}
|
이문제의 포인트는 정말 쉽다고 기본적인것 빼먹지 말자 입니다.
그것은 제가 범위를체크를 안해줘서 -1인경우나 배열방이 1000까지 라면 1001 이상인 숫자가 생겨서
런타임이 나서 그문제를 바보같이 실수 했습니다.
여러분들은 그렇지 않을꺼라 생각하지만 이런실수 정말 노노 합니다.
그리고 여기서 포인트라면 현재 화면에 있는 이모티콘이랑 클립보드에 있는 경우가 다를수 있기때문에
이차원배열을 이용 해서 이차원배열[현재 화면][클립보드] 이렇게 나눠서 체크를 해줘야 정확한 답이 나옵니다.
그래야 모든 경우를 볼 수있으니까요.
그림이 없어서 딱딱할 수 있는 글 봐주셔서 감사드립니다.
여러분들도 파이팅!!!
728x90
반응형
'알고리즘 모음집 > 알고리즘 (Algorithm)' 카테고리의 다른 글
백준 3019 테트리스 (0) | 2019.10.04 |
---|---|
백준 3568 iSharp (0) | 2019.10.04 |
백준 13549 숨바꼭질3 (0) | 2019.10.03 |
백준 2065 나룻배 (0) | 2019.10.02 |
백준 2931 가스관 (0) | 2019.10.02 |
댓글