일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 수식 최대화
- 미세먼지 안녕!
- 프로그래머스
- 15686번
- 12865번
- 빛의 경로 사이클
- SW Expert Academy
- 거울 설치
- QueryDSL 기초
- 1038번
- 2020 카카오 인턴십
- 경주로 건설
- SW ExpertAcademy
- 어른 상어
- 9095번
- 보석 쇼핑
- 키패드 누르기
- python
- 19238번
- 베스트엘범
- 감소하는 수
- 백준 알고리즘
- 14499번
- 17144번
- 파이썬
- 1789번
- HTML 기초
- 스타트 택시
- 16234번
- 12869번
Archives
- Today
- Total
보물창고 블로그
삼성 SW Expert Academy 4615 재밌는 오셀로 게임 본문
728x90
문제 링크: https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWQmA4uK8ygDFAXj
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
문제는 위에 링크에 가면 잘 나와있다.
내가 해결한 코드는 다음과 같다.
# 테스트 케이스 수를 t로 받는다.
t=int(input())
# 테스트 케이스 수만큼 반복
for test in range(1,t+1):
# 마지막에 총 흰돌과 검은돌의 수를 w,b에 입력하기위해 선언
w,b=0,0
# n은 오셀로 판의 크기 m은 돌을 둔 횟수
n,m=map(int,input().split())
# 판 중앙의 4개의 돌을 먼저 깔아두기
n1=n//2
map1=[[0 for i in range(n)] for i in range(n)]
map1[n1-1][n1-1]=2
map1[n1-1][n1]=1
map1[n1][n1-1]=1
map1[n1][n1]=2
# 돌을 둘 때마다 8방향을 탐색하기위해 변화량을 선언
dx=[-1,-1,0,1,1,1,0,-1]
dy=[0,-1,-1,-1,0,1,1,1]
#돌을 두면 돌을 중심으로 8방향을 체크하기위한 함수 check를 선언
def check(x,y,c):
for i in range(8):
flag=0
k=1
try:
while(1):
# 인덱스가 마이너스가 되면 안되므로 체크 인덱스크기를 벗어나는 것은 try문으로 해결
if (x-1+k*dx[i])>-1 and (y-1+k*dy[i])>-1:
if map1[x-1+k*dx[i]][y-1+k*dy[i]]!=0 and map1[x-1+k*dx[i]][y-1+k*dy[i]]!=c:
k+=1
# flag를 설정하는 이유는 같은 색의 돌을 만났을 경우에만 사이의 돌을 변경하기 위함이다.
elif map1[x-1+k*dx[i]][y-1+k*dy[i]]==c:
flag=1
break
else:
break
else:
break
except:
continue
# 탐색하다 같은 색의 돌을 발견하였을 경우에만 중간의 돌의 색을 변경
if flag==1:
for j in range(1,k):
map1[x-1+j*dx[i]][y-1+j*dy[i]]=c
#돌을 둘 때마다 check함수를 통해 돌들의 색을 변경해준다.
for s in range(m):
x1,y1,c1=map(int,input().split())
map1[x1-1][y1-1]=c1
check(x1,y1,c1)
# 돌을 다 두고 나서 검은색돌과 흰색돌의 개수를 센다.
for p in range(n):
for q in range(n):
if map1[p][q]==1:
b+=1
elif map1[p][q]==2:
w+=1
print('#{0} {1} {2} '.format(test,b,w))
내가 가장 헤매었던 부분은 check함수에서 인덱스가 음수가 되어도 try문이 해결할 줄 알았지만, 파이썬에는 인덱스가 음수가 되어도 문제가 없다는 것을 간과하였다. 예를 들면 인덱스가 -1이 되어서 list 1 [-1]를 호출하여도 list 1의 가장 마지막 원소를 호출한다는 것을 간과하였다. 다음부터는 이 점을 명심해야겠다.
'알고리즘 풀이 > SW Expert Academy' 카테고리의 다른 글
SW Expert Academy 2819 격자판의 숫자 이어 붙이기 (0) | 2020.01.16 |
---|---|
SW Expert Academy 1961 숫자 배열 회전 (0) | 2020.01.03 |
SW Expert Academy 4613 러시아 국기 같은 깃발 (0) | 2020.01.03 |
삼성 SW Expert Academy 5653. [모의 SW 역량테스트] 줄기세포배양 (0) | 2020.01.02 |
삼성 SW Expert Academy 1767. [SW Test 샘플문제] 프로세서 연결 문제풀이 (0) | 2019.12.27 |
Comments