728x90 알고리즘/SWEA9 [SWEA]230404 문제풀이 최소 이동거리 def dijkstra(n, s): for i in adj[n]: nxt, d = i if distance[nxt] N - 1 or nx N - 1: continue fuel = 1 if lst[ny][nx] > lst[y][x]: fuel += lst[ny][nx] - lst[y][x] if distance[ny][nx] > distance[y][x] + fuel: distance[ny][nx] = distance[y][x] + fuel heapq.heappush(q, (ny, nx)) ans = distance[-1][-1] print(f'#{tc} {ans}') 01BFS에서 높이 차이에 따른 연료의 소모량까지 고려해줘야 하는 문제. 마찬가지로 효율적인 경로를 우.. 2023. 4. 4. [SWEA]230216 문제풀이 배열 최소 합 T = int(input()) for i in range(T): N = int(input()) lst = [] for j in range(N): lst.append(list(map(int, input().split()))) ans = 1e10 def makesum(n, s, v): global ans temp = v + [n] if len(temp) == N and s < ans: ans = s else: for j in range(N): if j not in temp and s + lst[len(temp)][j] < ans: makesum(j, s + lst[len(temp)][j], temp) for k in range(N): makesum(k, lst[0][k], []) print(f.. 2023. 2. 16. [SWEA]230209 문제풀이 3143. 가장 빠른 문자열 타이핑 T = int(input()) for i in range(T): a, b = map(str, input().split()) # skip array 생성 skiparr = {} for j in range(len(b)): skiparr[b[j]] = len(b) - 1 - j # 반복문 초기 설정 breaker = True x, y = 0, len(b) inputcnt = 0 same = 0 # 연산 while breaker: temp = a[x:y] # 완전히 같을 때 이동 if temp == b: same += 1 inputcnt += 1 x += len(b) y += len(b) if y > len(a): breaker = False # 완전히 같지 않을 때 else.. 2023. 2. 9. [SWEA]230208 문제풀이 어디에 단어가 들어갈 수 있을까 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)}'.. 2023. 2. 8. [SWEA]230207 문제풀이 풍선팡2 T = int(input()) di = [0, 0, -1, 1] dj = [-1, 1, 0, 0] for i in range(T): N, M = map(int, input().split()) lst = [] ans = [] for j in range(N): lst.append(list(map(int, input().split()))) for j in range(N): for k in range(M): bls = lst[j][k] for l in range(2): if j+di[l+2] in range(N): bls += lst[j+di[l+2]][k+dj[l+2]] if k+dj[l] in range(M): bls += lst[j+di[l]][k+dj[l]] ans.append(bls) prin.. 2023. 2. 7. [SWEA]230201 문제풀이 gravity T = int(input()) for k in range(T): N = int(input()) nlist = list(map(int, input().split())) drop = [] for i in range(N): count = 0 for j in nlist[i + 1:]: if j < nlist[i]: count += 1 drop.append(count) print(f'#{k + 1} {max(drop)}') 2차원 배열로 푸는 문젠줄 알았지만 알고보니 1차원 배열로 빠르게 찾아낼 수 있었던 문제. 간단히 생각하는 습관을 가지자 4831. 전기 버스 T = int(input()) for i in range(T): K, N, M = map(int, input().split()) stop.. 2023. 2. 1. [SWEA]230112 문제풀이 1204. 최빈수 구하기 T = int(input()) for i in range(T): t_num = int(input()) t_case = list(input().split()) countnum = 0 num = 0 for k in range(1000): if t_case.count(t_case[k]) >= countnum: countnum = t_case.count(t_case[k]) num = t_case[k] print(f'#{t_num} {num}') 변수를 재선언해 최빈수 중 최댓값을 구하는 방식 계속 알고리즘을 헷갈려 런타임 오류가 난다 1209. sum for i in range(10): t_num = int(input()) t_case = [] for j in range(100): t .. 2023. 1. 12. [SWEA]230109 문제풀이 2063. 중간값 찾기 N = int(input()) b = list(map(int, input().split())) b.sort() mid = N//2 a = b[mid] print(a) 엔터로 구분된 입력값들은 각각 별개의 input() 함수로 받는다. 2068. 최대수 구하기 T = int(input()) for i in range(3): a = map(int, input().split()) MAX_NUM = max(a) print(f'#{i+1} {MAX_NUM}') 2071. 평균값 구하기 T = int(input()) for i in range(T): a = map(int, input().split()) averagenum = round(sum(a)/10) print(f'#{i+1} {aver.. 2023. 1. 9. [SWEA]230103 문제풀이 1936. 1대1 가위바위보 A, B = map(int, input().split()) diff_ = A - B if diff_ == 1 or diff_ == -2: print('A') else: print('B') map으로 변수 여러개 동시에 입력받기 if문에서 or 사용시 각 조건 개별로 지정 2058. 자릿수 더하기 number = input() a = str(number) n = [] for i in range(0,len(a)): b = int(a[i]) n.append(b) print(sum(n)) 함수 서식 제대로 사용하기 수정 시 변수명 확인 2063. 중간값 찾기 b = list(map(int, input().split())) N = b[0] b = b[1:] b.sort() mid = .. 2023. 1. 3. 이전 1 다음 728x90