728x90
삼성 SW 역량 테스트 기출 문제인 14890번 문제
from sys import stdin
n, l = list(map(int, stdin.readline().split()))
li = []
for i in range(n):
li.append(list(map(int, stdin.readline().split())))
count = 0
for i in range(n):
previous = -1
seq = []
maximum = -1
for j in range(n):
if j == 0:
maximum = li[i][j]
seq.append([li[i][j], 1])
else:
if li[i][j] > maximum:
maximum = li[i][j]
if previous == li[i][j]:
seq[-1][1] = seq[-1][1] + 1
else:
seq.append([li[i][j], 1])
previous = li[i][j]
if len(seq) == 1:
count += 1
elif n / l < len(seq):
pass
else:
for k in range(len(seq)):
if k > 0 and abs(seq[k - 1][0] - seq[k][0]) != 1:
break
elif seq[k][0] != maximum and seq[k][1] < l:
break
elif 0 < k < len(seq) - 1:
if seq[k - 1][0] > seq[k][0] and seq[k + 1][0] > seq[k][0] and seq[k][1] < l * 2:
break
else:
if k == len(seq) - 1:
count += 1
for i in range(n):
previous = -1
seq = []
maximum = -1
for j in range(n):
if j == 0:
maximum = li[j][i]
seq.append([li[j][i], 1])
else:
if li[j][i] > maximum:
maximum = li[j][i]
if previous == li[j][i]:
seq[-1][1] = seq[-1][1] + 1
else:
seq.append([li[j][i], 1])
previous = li[j][i]
if len(seq) == 1:
count += 1
elif n / l < len(seq):
pass
else:
for k in range(len(seq)):
if k > 0 and abs(seq[k - 1][0] - seq[k][0]) > 1:
break
elif seq[k][0] != maximum and seq[k][1] < l:
break
elif 0 < k < len(seq) - 1:
if seq[k - 1][0] > seq[k][0] and seq[k + 1][0] > seq[k][0] and seq[k][1] < l * 2:
break
else:
if k == len(seq) - 1:
count += 1
print(count)
seq의 원소는 [높이, 연속된 개수]로 되어있다.
728x90
'알고리즘 문제' 카테고리의 다른 글
[백준] 17269번 이름궁합 테스트 (0) | 2020.01.18 |
---|---|
[백준] 1932번 정수 삼각형 (0) | 2020.01.18 |
[백준] 14503 로봇 청소기 (0) | 2020.01.15 |
[백준] 1149번 RGB 거리 (0) | 2020.01.12 |
[백준] 9461번 파도반수열 (0) | 2020.01.12 |