일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 문자열 처리
- 동적 계획법
- 투 포인터
- 분할 정복
- 스위핑 알고리즘
- fsb
- ROP
- 연결리스트
- 백트래킹
- tcache
- 브루트 포스
- RTL
- off by one
- 이분 탐색
- 포맷스트링버그
- House of Orange
- 에라토스테네스의 체
- BFS
- 이진트리
- 수학
- 이진 탐색
- BOF
- 스택
- DFS
- 큐
- syscall
- OOB
- 완전 탐색
- heap
- 다이나믹 프로그래밍
Archives
- Today
- Total
SDJ( 수돈재 아님 ㅎ )
[C++] 1013 - Contact 본문
문제링크 : https://www.acmicpc.net/problem/1013
잠수함 식별이라는 문제와 똑같은 문제다.
잠수함 식별문제를 풀 때는 문자열 처리를 통해서 풀었지만 질문 중에서 다음과 같은 글을 보게 됐다.
www.acmicpc.net/board/view/1312
그래서.. 이 글을 읽고 띠용 해서 북마크만 해놨는데 이제서야 한번 제대로 구현을 해본다.
위의 글에 있는 내용을 쭉 읽고나서 답변해주신 분의 말씀대로 그림으로 그래프(?)를 노트에 끄적거리면서 여러 시행착오를 겪다가 결국 풀었다. 근데 생각보다 그렇게 복잡하지는 않더라. (응용을 어떻게 할 수 있는지가 문제긴 한데)
#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
int D[2][8]={
{1, -1, 5, 2, 1, 5, 5, 6},
{7, 0, 0, 3, 3, 4, -1, -1}
};
int main(void)
{
int t;
int n;
string tmp;
cin >> t;
while(t--)
{
n = 0;
cin >> tmp;
for(int i = 0; i < tmp.length() && n != -1; ++i)
n = D[tmp[i]-'0'][n];
if(n == 0 || n == 4 || n == 3)
cout << "YES" << endl;
else
cout << "NO" << endl;
}
return 0;
}
'알고리즘 > Backjoon' 카테고리의 다른 글
[Java] 8911 - 거북이 (0) | 2020.07.01 |
---|---|
[C++] 17267 - 상남자 (0) | 2020.07.01 |
[C] 1021 - 회전하는 큐 (0) | 2020.06.30 |
[C++] 12904 - A와 B (0) | 2020.06.30 |
[C++] 1806 - 부분합 (0) | 2020.02.01 |
Comments