본문 바로가기

파이썬 알고리즘 (인프런)

(21)
11. 격자판 회문수 # 격자판 회문수 def run(a): cnt = 0 for i in range(7): for j in range(3): for k in range(2): if a[i][j+k] != a[i][j+4-k]: break else: cnt += 1 for j in range(3): for k in range(2): if a[j+k][i] != a[j+4-k][i]: break else: cnt += 1 return cnt a = [list(map(int, input().split())) for _ in range(7)] print(run(a))
10. 스도쿠 검사 # 스도쿠 검사 def run(mp): for i in range(9): ch = [0] * 10 for j in range(9): ch[mp[i][j]] = 1 if sum(ch) != 9: return "NO" ch = [0] * 10 for j in range(9): ch[mp[j][i]] = 1 if sum(ch) != 9: return "NO" for i in range(3): for j in range(3): ch = [0] * 10 for k in range(3): for s in range(3): ch[mp[i*3+k][j*3+s]] = 1 if sum(ch) != 9: return "NO" return "YES" mp = [list(map(int, input().split())) for ..
9. 봉우리 # 봉우리 def run(N, mp): cnt = 0 for i in range(N): for j in range(N): for mx, my in [(1, 0), (-1, 0), (0, 1), (0, -1)]: x = i + mx y = j + my if 0
8. 곳감 # 곳감 (모래시계) def rotate(N, MP, r, d, c): a = MP[r-1][:] for i in range(N): if d == 0: MP[r-1][i] = a[(i+c) % N] else: MP[r-1][i] = a[(i-c) % N] return MP def summ(N, MP): tot = 0 s, e = 0, N for i in range(N): tot += sum(MP[i][s:e]) if i < N // 2: s += 1 e -= 1 else: s -= 1 e += 1 return tot N = int(input()) MP = [list(map(int, input().split())) for _ in range(N)] M = int(input()) for _ in range(..
7. 사과나무 # 사과나무 (다이아몬드) def run(N, mp): tot = 0 s = e = N//2 for i in range(N): for j in range(s, e+1): tot += mp[i][j] if i < N//2: s -= 1 e += 1 else: s += 1 e -= 1 return tot N = int(input()) mp = [list(map(int, input().split())) for _ in range(N)] print(run(N, mp))
6. 격자판 최대합 # 격자판 최대합 def run(N, mp): max_s = 0 for i in range(N): s1 = s2 = 0 for j in range(N): s1 += mp[i][j] s2 += mp[j][i] max_s = max(max_s, s1) max_s = max(max_s, s2) s1 = s2 = 0 for i in range(N): s1 += mp[i][i] s2 += mp[i][-1-i] max_s = max(max_s, s1) max_s = max(max_s, s2) return max_s N = int(input()) mp = [list(map(int, input().split())) for _ in range(N)] print(run(N, mp))
5. 수들의 합 # 수들의 합 def run(N, M, a): cnt = 0 ps = pe = tot = 0 # tot = sum(a[ps:pe]) while True: if tot < M: if pe == N: break tot += a[pe] pe += 1 else: if tot == M: cnt += 1 tot -= a[ps] ps += 1 return cnt N, M = map(int, input().split()) a = list(map(int, input().split())) print(run(N, M, a))
4. 두 리스트 합치기 # 두 리스트 합치기 def run(N, a, M, b): return sorted(a+b) # 병합정렬 응용해서 합치고 정렬하기 def run(N, a, M, b): res = [] pa = pb = 0 while pa < N and pb < M: if a[pa] < b[pb]: res.append(a[pa]) pa += 1 else: res.append(b[pb]) pb += 1 if pa < N: res.extend(a[pa:]) else: res.extend(b[pb:]) return res N = int(input()) a = list(map(int, input().split())) M = int(input()) b = list(map(int, input().split())) ans = run(..