-
[백준 / Python] 3019번 테트리스 | 초코더알고리즘/백준 2020. 2. 12. 14:32
https://www.acmicpc.net/problem/3019
접근법
1. 각 블록마다 회전하여 필드에 떨어트렸을때, 딱 맞게 떨어지는 필드의 높이를 숫자로 표현해 보겠습니다
1번블록
ㅣ-> 한칸 넓이 이므로, 모든 경우에 가능. 즉 c만큼의 경우의 수.
ㅡ-> 넓이가 4이므로, 필드에서 4칸연속 높이가 같은 곳이 있는 경우의 수. 0000
2번블록
ㅁ->넓이가 2이므로, 필드에서 2칸연속 높이가 같은 곳이 있는 경우의 수. 00
3번블록
넓이가 3인데 가장 오른쪽 아래를 보면 비어있으므로, 필드에서 2칸연속 높이가 같으면서 3번째칸은 높이가
1인 경우의 수. 001
넓이가 2인데 가장 왼쪽 아래를 보면 비어있으므로, 1번째칸은 높이가 1이면서 다음은 한칸 낮은 경우의 수.10
이런식으로 블럭의 경우마다 나누어서 for문을 돌려 필드의 높이를 비교하여 ans를 증가시켜줍니다.
나의 풀이
#1. 각블록마다 회전하여 놓았을때 딱맞을 수 있는 높이의 경우를 구해줌 #2. 그 경우에 해당하면 ans를 1씩 증가시킴 import sys c,p=map(int,input().split()) fd=list(map(int,sys.stdin.readline().split())) ans=0 if p==1: #ㅣ모양의 블럭은 모든열에 놓을 수 있기 때문에 c만큼 경우의 수를 더함 ans=ans+c #0 for i in range(c-3): #0000 if fd[i] == fd[i + 1] and fd[i + 1] == fd[i + 2] and fd[i + 2] == fd[i + 3]: ans+=1 if p==2: for i in range(c-1): #00 if fd[i] == fd[i + 1]: ans+=1 if p==3: for i in range(c-2): #001 if fd[i] == fd[i + 1] and fd[i + 1] == fd[i + 2] - 1: ans+=1 for i in range(c-1): #10 if fd[i] == fd[i + 1] + 1: ans+=1 if p==4: for i in range(c-2): #100 if fd[i] == fd[i + 1] + 1 and fd[i + 1] == fd[i + 2]: ans+=1 for i in range(c-1): #01 if fd[i] == fd[i + 1] - 1: ans+=1 if p==5: for i in range(c-2): #000 if fd[i] == fd[i + 1] and fd[i + 1] == fd[i + 2]: ans+=1 #101 if fd[i] == fd[i + 1] + 1 and fd[i + 1] == fd[i + 2] - 1: ans+=1 for i in range(c-1): #10 if fd[i] == fd[i + 1] - 1: ans+=1 #10 if fd[i] == fd[i + 1] + 1: ans+=1 if p==6: for i in range(c-2): #000 if fd[i]==fd[i+1] and fd[i+1]==fd[i+2]: ans+=1 #011 if fd[i]==fd[i+1]-1 and fd[i+1]==fd[i+2]: ans+=1 for i in range(c-1): #00 if fd[i]==fd[i+1]: ans+=1 #20 if fd[i]==fd[i+1]+2: ans+=1 if p==7: for i in range(c-2): #000 if fd[i]==fd[i+1] and fd[i+1]==fd[i+2]: ans+=1 #110 if fd[i]==fd[i+1] and fd[i+1]==fd[i+2] + 1: ans+=1 for i in range(c-1): #02 if fd[i]==fd[i+1]-2: ans+=1 #00 if fd[i]==fd[i+1]: ans+=1 print(ans)
'알고리즘 > 백준' 카테고리의 다른 글
[백준 / Python] 16956번 늑대와 양 | 초코더 (0) 2020.08.18 [백준 / Python] 16929번 Two Dots | 초코더 (0) 2020.02.12 [백준 / Python] 13913번 숨바꼭질 4 | 초코더 (0) 2020.02.06 [백준 / Python] 1697번 숨바꼭질 | 초코더 (0) 2020.02.06 [백준 / Python] 10973번 이전 순열 | 초코더 (0) 2020.02.06