본문 바로가기

컴퓨터/코테

프로그래머스 위클리 챌린지 - 9주차 [그래프] from collections import defaultdict def TreeSize(start, excep, linkInfo, n): q = list(filter(lambda x: x != excep , linkInfo[start])) visited = [True if i in q else False for i in range(n+1)] visited[start] = True cnt = len(q) + 1 while q: nextVal = q.pop() for i in linkInfo[nextVal]: if not visited[i]: q.append(i) visited[i] = True cnt += 1 return cnt def solution(n, wires): linkInfo = defaultd.. 더보기
카카오 2019 기출 - 실패율 def solution(N, stages): failRate = [] for i in range(1, N+1): cnt, rate = 0, 0 for j in stages: if j >= i: cnt += 1 if j == i: rate += 1 if cnt: failRate.append([i, rate / cnt]) else: failRate.append([i, 0]) #실패율 내림차순 정렬, 실패율 같으면 스테이지 번호로 오름차순 정렬 failRate = sorted(failRate, key = lambda x : (-x[1], x[0])) return list(map(lambda x : x[0],failRate)) cnt : 현재 스테이지에 도달한 플레이어 수 rate : 현재 스테이지에 머물러 있.. 더보기
2022 블라인드 카카오 1차 2차 코딩테스트 후기 9/18, 9/25 카카오 블라인드 1차 2차 코딩 테스트가 있었다. 준비는 프로그래머스에서 카카오 기출 풀면서 일주일 정도 준비했다. 10문제는 푼거같다. 작년에 처음 카카오 코테의 쓴맛을 보고 이번에 다시 도전해봤는데 생각보다 선방이었다. 오전 10시에 라인, 2시부터 카카오 거의 하루 7시간을 코테 보는데 써야했는데 나름 재밌었다. 라인 올솔해서 파이팅 넘치는 상태였어서 그런가.. 4번까지는 자료구조 좀 사용해서 구현으로 밀어붙였다. 4번같은 경우에는 테케 하나가 자꾸 삑나서 뭐때문일까.. 한참 고민했는데 초기값을 0 이 아닌 1로 변경했더니 코너케이스까지 다 맞추게 됐다. 시험 중에 빠르게 분석해본걸로는 내 로직에서 점수 계산 과정이 초기값을 0으로 했을때 놓치는 케이스가 있었다. 5번문제는 트리.. 더보기
백준 1890 점프 - [dp] import sys input = sys.stdin.readline N = int(input()) arr = [list(map(int, input().split())) for i in range(N)] dp = [[-1 for j in range(N)] for i in range(N)] def dfs(y, x): if y == N-1 and x == N-1 : return 1 if dp[y][x] == -1: dp[y][x] = 0 jump = arr[y][x] if y + jump < N: dp[y][x] += dfs(jump + y, x) if x + jump < N: dp[y][x] += dfs(y, jump + x) return dp[y][x] print(dfs(0,0)) dp를 최대한 활용해서 .. 더보기
백준 17836 - 공주 구출 [bfs] """ 17836 백준 """ from collections import deque H, W, T = map(int, input().split()) arr = [list(map(int, input().split())) for i in range(H)] dirs = [ [0,1], [1,0], [0,-1], [-1,0] ] def bfs(): visited = [[False for i in range(W)] for j in range(H)] visitSword = [[False for i in range(W)] for j in range(H)] q = deque([[0,0,0,0]]) visited[0][0] = True while q: y, x, t, sword = q.popleft() if y == H.. 더보기
삼성 기출 9660 번호 붙이기 """ https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AXCjuQl6J5UDFAX0&categoryId=AXCjuQl6J5UDFAX0&categoryType=CODE """ def dfs(lenArr, arr, idx, tmp, cnt): if len(tmp) == lenArr: return 1 for next in list(filter(lambda x : x != -1 ,[i if str(i) != arr[idx] and str(i) not in tmp else -1 for i in range(1, len(arr)+1)])): cnt += dfs(lenArr, arr, idx + 1, tmp + str(next).. 더보기
백준 1987 알파벳 - bfs """ 백준 1987 알파벳 """ import sys input = sys.stdin.readline R, C = map(int, input().split()) arr = [input() for _ in range(R)] dir = [[0, 1], [0, -1], [1, 0], [-1, 0]] q = set([(0, 0, arr[0][0])]) answer = 1 while q : y, x, v = q.pop() for d in dir: ny = y + d[0] nx = x + d[1] if 0 더보기
블록이동하기(드론 조종) - bfs def solution(board): H = len(board) W = len(board[0]) moves = [ [0, 1], [0, -1], [1, 0], [-1, 0] ] def bfs(): state = [[[True, True] for _ in range(W)] for __ in range(H)] # 0 가로, 1 세로 q = [[0, 0, 0, 0]] state[0][0][0] = False while q: y, x, curDir, cnt = q.pop(0) if curDir: # 탈출 조건 체크 if x == W - 1 and y + 1 == H - 1: return cnt # 현재 세로라면 이동 or 회전 4가지 # 이동한다면 for move in moves: # 갈 수 있는지 이제부터 확.. 더보기
카카오 외벽 점검 from itertools import permutations def solution(n, weak, dist): answer = 10000000 dist.sort(reverse=True) weak.sort() friendsNum = len(dist) weakLen = len(weak) for i in range(weakLen): weak.append(weak[i]+n) friendPerm = list(permutations(dist, friendsNum)) isFailed = True for i in range(weakLen): currentWeak = weak[i:i+weakLen] for friendComb in friendPerm: curWeakIdx = 0 curFriendIdx = 0 whil.. 더보기
백준 2533 SNS import sys sys.setrecursionlimit(1000000) input = sys.stdin.readline N = int(input()) Tree = [[] for _ in range(N+1)] check = [True for _ in range(N+1)] for _ in range(N-1): u, v=map(int, input().split()) Tree[u].append(v) Tree[v].append(u) dp = [[0,0] for _ in range(N+1)] def dfs(cur): check[cur] = False dp[cur][0] = 0 #포함 x dp[cur][1] = 1 #포함 o for i in Tree[cur]: if check[i]: dfs(i) dp[cur][0.. 더보기