일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- LazyPropagation
- 투포인터
- 좌표압축
- 크루스칼
- 이분탐색
- lca
- DP
- MST
- 에라토스테네스의 체
- BFS
- boj
- 누적합
- 수학
- 이분매칭
- DisjointSet
- 삼분탐색
- 브루트포스
- 세그먼트트리
- 백준
- 펜윅트리
- 구현
- 이진탐색
- lis
- dfs
- 그리디
- 다익스트라
- 비트마스크
- 플로이드와샬
- 위상정렬
- 정렬
Archives
- Today
- Total
lastknight00
[백준] 틱택토(7682) 본문
문제 링크 : [백준] 틱택토(7682)
문제 설명
3*3 문자열 배열이 주어졌을 때, 틱택토 게임 규칙대로 경기가 진행되어 게임이 종료되었을 때 나올 수 있는 결과인지 판단하시오.
입력
한줄에 9개의 문자가 주어집니다.(각 문자의 내용은 아래와 같습니다.)
X : 먼저 두는 사람의 말
O : 나중에 두는 사람의 말
. : 빈 칸
입력은 반복되어 나타나며, end가 주어지면 종료됩니다.
XXXOO.XXX
XOXOXOXOX
OXOXOXOXO
XXOOOXXOX
XO.OX...X
.XXX.XOOO
X.OO..X..
OOXXXOOXO
end
출력
유효한 판인지 출력합니다.
invalid
valid
invalid
valid
valid
invalid
invalid
invalid
카테고리
#구현
시간 복잡도 상한
의미없음
해결 방법
- 단순 구현으로 유효한 경우에 대한 경우의 수를 잘 정리하여야 합니다.
- 처음 놓는 사람(A)가 이긴 경우, X가 O보다 한칸 더 많아야 합니다.
- 나중에 놓는 사람(B)가 이긴 경우, O와 X의 수는 항상 같아야 합니다.
- 비긴 경우(이긴 사람이 없는 경우), X는 5개, O는 4개여야 합니다.(꽉 찬 경우)
- 예외의 경우로, A, B 둘 다 이긴 경우, 어떤 상황에서도 나올 수 없는 상황입니다.
- 위의 상황을 구현합니다.
시간복잡도
의미없음
코드
#include<cstdio>
int i,j,x,y,n,m,z;
char s[10];
int c(int i,char m){
if((s[i*3]==m&&s[i*3+1]==m&&s[i*3+2]==m)
||(s[i]==m&&s[i+3]==m&&s[i+6]==m)
||(s[0]==m&&s[4]==m&&s[8]==m)
||(s[2]==m&&s[4]==m&&s[6]==m))return 1;
return 0;
}
int main(){
while(1){
z=x=y=n=m=0;
scanf("%s",s);
if(s[0]=='e')break;
for(i=0;i<3;i++){
x+=c(i,'O');
y+=c(i,'X');
for(j=0;j<3;j++){
if(s[i*3+j]=='O')n++;
if(s[i*3+j]=='X')m++;
}
}
if(x&&y)z=0;
else if(m-n==1&&y)z=1;
else if(m==n&&x)z=1;
else if(m==5&&n==4&&!x&&!y)z=1;
printf("%svalid\n",z?"":"in");
}
}
'PS' 카테고리의 다른 글
[백준] X와 K(1322) (0) | 2020.05.28 |
---|---|
[백준] 트리의 높이와 너비(2250) (0) | 2020.05.27 |
[백준] 징검다리 달리기2(1810) (0) | 2020.05.26 |
[백준] 증가 수열의 갯수(17409) (3) | 2020.05.26 |
[백준] 인경호의 징검다리(11583) (0) | 2020.05.26 |
Comments