목록SW Expert Academy/Programming - Intermediate (31)
Hikenny25
def is_palindrome(s): return s == s[::-1] for t in range(10): n = int(input()) matrix = [list(input().rstrip()) for _ in range(8)] cnt = 0 for _ in range(2): for i in range(8): for j in range(8-n+1): if is_palindrome(matrix[i][j:j+n]): cnt += 1 matrix = list(zip(*matrix)) print(f"#{t+1} {cnt}") 저번에 파이썬 SW문제해결 기본 - String 에 들어있던 문제와 거의 동일하다.. 이번 코드에서 다른 점은 is_palindrome() 함수인데, 슬라이싱을 이용해서 짧게 써주었다~
for t in range(10): _ = input() str1 = input() # object str2 = input() # sentence cnt = 0 len1 = len(str1) len2 = len(str2) for i in range(len2 - len1 + 1): if str1 == str2[i:i+len1]: cnt += 1 print(f"#{t+1} {cnt}") 제한시간보니 그냥 Brute Force로 풀어줘도 TLE 안날 것 같아서 굳이 kmp나 보이어-무어 안썼다! 간단한 문자열 구현 문제
from collections import deque class Graph: def __init__(self, size): self.size = size self.matrix = [[0] * size for _ in range(size)] self.visited = [0] * size self.predecessor = [0] * size def addEdge(self, v1, v2): self.matrix[v1][v2] = self.matrix[v2][v1] = 1 def BFS(self, start, goal): q = deque([start]) self.visited[start] = 1 while q: k = q.pop() for i in range(self.size): if self.matrix[i..

들어가기 전에 queue 이용해서 어떻게 구현하나를 미리 생각해놓아서 쉽게 풀 수 있었다.. 무난무난한 큐 문제라고 생각 from collections import deque for t in range(int(input())): n, pizza_number = map(int, input().split()) cheeze = list(map(int, input().split())) q = deque([i for i in range(n)]) out_list = list() count = pizza_number - n while q: k = q.popleft() cheeze[k] //= 2 if cheeze[k] == 0: out_list.append(k) count += 1 new_pizza = 2*n + c..
from collections import deque delta = [[0,1], [0,-1], [1,0], [-1,0]] for t in range(int(input())): n = int(input()) maze = [list(map(int, input().rstrip())) for _ in range(n)] dept_point = tuple() objt_point = tuple() for i in range(n): for j in range(n): if maze[i][j] == 2: dept_point = (i, j) elif maze[i][j] == 3: objt_point = (i, j) q = deque([dept_point]) predecessor = [[0] * n for _ in rang..
from collections import deque for t in range(int(input())): n, m = map(int, input().split()) deq = deque(list(map(int, input().split()))) for i in range(m): tmp = deq.popleft() deq.append(tmp) print(f"#{t+1} {deq[0]}") 쉬운 큐 구현 문제.. 파이썬은 deque 제공 하므로 이용해서 쉽게 풀어주엇다
풀이 1 - 모든 순열 구해서 값 구하기 (거의 브루트 포스) def perm(cnt): if cnt == n: vperm.append(sel.copy()) else: for i in range(n): if check[i] == 0: sel[cnt] = varr[i] check[i] = 1 perm(cnt + 1) check[i] = 0 for c in range(int(input())): n = int(input()) number = [list(map(int, input().split())) for _ in range(n)] varr = [i for i in range(n)] vperm = list() sel = [0 for _ in range(n)] check = [0 for _ in range(n)..
def who_is_winner(f, r): x = card[f] y = card[r] if x == 1: if y == 1 or y == 3: return [f] else: return [r] elif x == 2: if y == 2 or y == 1: return [f] else: return [r] else: if y == 3 or y == 2: return [f] else: return [r] def divide(arr): if len(arr) == 1: return arr i = 1 j = len(arr) mid = (i+j) // 2 front = arr[:mid] rear = arr[mid:] front = divide(front) rear = divide(rear) return who_is..
def line_to_line_distance(start, end): return abs(start_column[start]-start_column[end]) - 1 array_size = 100 repeat_number = 10 ans = list() for _ in range(repeat_number): _ = input() ladder = [list(map(int, input().split())) for _ in range(array_size)] start_column = list() for i in range(array_size): if ladder[0][i] == 1: start_column.append(i) distance = list() for i in range(len(start_colum..
array_size = 100 ans = list() for _ in range(10): _ = int(input()) ladder = [list(map(int, input().split())) for _ in range(array_size)] start = ladder[-1].index(2) line_number = list() for i in range(array_size): if ladder[0][i] == 1: line_number.append(i) line_cnt = line_number.index(start) r, c = array_size - 1, start # row, column for i in range(array_size - 1): r -= 1 if c > 0 and ladder[r]..