728x90
어디에 단어가 들어갈 수 있을까
T = int(input())
for i in range(T):
N, K = map(int, input().split())
lst = []
for j in range(N):
lst.append(list(map(int, input().split())))
ans = []
for j in range(N):
rcnt = ccnt = 0
for k in range(N):
if lst[j][k]:
rcnt += 1
else:
ans.append(rcnt)
rcnt = 0
if lst[k][j]:
ccnt += 1
else:
ans.append(ccnt)
ccnt = 0
ans.append(rcnt)
ans.append(ccnt)
print(f'#{i+1} {ans.count(K)}')
빈 칸이면 cnt를 하나씩 올리다가 막히면 cnt를 초기화하면서 행과 열을 이중 for문 한번에 돌면서 ans 리스트에 추가했다. 0을 기준으로 split하는 등의 방식도 괜찮을 것 같다.
회문
T = int(input())
for i in range(T):
n, m = map(int, input().split())
lst = []
for j in range(n):
lst.append(input())
for j in range(n):
for k in range(n-m+1):
word = lst[j][k:k+m]
rev = ''.join(reversed(word))
if word == rev:
ans = word
for j in range(n):
for k in range(n-m+1):
word = ''
for l in range(m):
word += lst[k+l][j]
rev = ''.join(reversed(word))
if word == rev:
ans = word
print(f'#{i+1} {ans}')
reversed 메서드를 쓰면 따로 값이 저장되지 않아서 join메서드를 활용해서 거꾸로 한 문자열을 다시 한번 선언해주는 것이 포인트
ladder2
for i in range(10):
n = int(input())
ladder = []
for j in range(100):
ladder.append(list(map(int, input().split())))
def side(x, y, k, cnt):
if y + k in range(100) and ladder[x][y + k]:
return side(x, y + k, k, cnt + 1)
else:
return y, cnt
def counting(n):
cnt = 0
x, y = 0, n
while True:
if y + 1 in range(100) and ladder[x][y + 1]:
y, cnt = side(x, y, 1, cnt)
cnt += 1
x += 1
if x == 99:
break
elif y - 1 in range(100) and ladder[x][y - 1]:
y, cnt = side(x, y, -1, cnt)
cnt += 1
x += 1
if x == 99:
break
else:
cnt += 1
x += 1
if x == 99:
break
return cnt
mini = 1e10
ans = 0
for j in range(100):
if ladder[0][j] and counting(j) <= mini:
mini = counting(j)
ans = j
print(f'#{i+1} {ans}')
어제 풀었던 문제랑 똑같고 순회한 횟수만 추가해주면 되는건데 다른 로직으로 한번 짜보려다가 대차게 당하고 코드 복붙해서 다시 풀었다... 반복문이랑 조건문이 어떻게 돌아가는지 로직 흐름을 완전 정확하게 이해하고 있어야 오류가 안난다는 것을 다시한번 체감... 이런 이차원 배열같은 경우는 중간에 print로 보면서 디버깅하기가 너무 힘들었다.
백준은 시간 초과 안나게 최대한 효율적인 로직 찾는게 일이라면 지금 swea에서 풀고 있는 것들은 로직 구현하기가 너무 복잡해서 양쪽으로 단련중이다... 꽤 힘들지만 이러면서 성장하리라 믿는다.
728x90
'알고리즘 > SWEA' 카테고리의 다른 글
[SWEA]230216 문제풀이 (1) | 2023.02.16 |
---|---|
[SWEA]230209 문제풀이 (0) | 2023.02.09 |
[SWEA]230207 문제풀이 (0) | 2023.02.07 |
[SWEA]230201 문제풀이 (0) | 2023.02.01 |
[SWEA]230112 문제풀이 (0) | 2023.01.12 |
댓글