본문 바로가기

컴퓨터/코테

카카오 기출 - 표편집 실패 from functools import reduce def moveCur(movement, arr, curIdx, m): while movement > 0: curIdx += m if arr[curIdx][1] == 'O': movement -= 1 return curIdx def findNextIdx(curIdx, arr): length = len(arr) ret = curIdx while curIdx 0: ret -= 1 if arr[ret][1] == 'O': return ret def solution(n, k, cmd): answer = '' curIdx.. 더보기
백준 2156 - 포도주 [dp] num = int(input()) arr= [int(input()) for _ in range(num)] dp = [False for _ in range(num)] if num == 1 : print(arr[0]) else : dp[0] = arr[0] dp[1] = arr[0] + arr[1] for i in range(2, num) : dp[i] = max(dp[i - 2] + arr[i], dp[i-3] + arr[i-1] + arr[i]) dp[i] = max(dp[i], dp[i-1]) print(dp[-1]) 하나 건너뛰면서 선택하던 기본 dp 문제들에서 한단계 업그레이드 된 문제. 해결 아이디어 1) 현재의 상황에서 생각하기 2) 만약 현재 선택이 건너뛰고 첫 선택이라면 dp[i-2] + a.. 더보기
카카오 기출 - 키패드 누르기 def solution(numbers, hand): answer = '' middleNum = { 2: [0, 1], 5: [1, 1], 8: [2, 1], 0: [3, 1] } l = [3, 0] r = [3, 2] for num in numbers: if num in (1, 4, 7): answer += 'L' l[0] = int(num / 3) elif num in (3, 6, 9): answer += 'R' r[0] = int(num / 3 - 1) else: # 2,5,8,0 y, x = middleNum[num] Rdist = abs(r[0] - y) + abs(r[1] - x) Ldist = abs(l[0] - y) + abs(l[1] - x) if Rdist < Ldist: answer +.. 더보기
카카오 2021 기출 - 광고삽입 실패1 def strToTime(str): str = str.split(':') return int(str[0]) * 3600 + int(str[1]) * 60 + int(str[2]) def timeToStr(time): h = time // 3600 time = time % 3600 m = time // 60 sec = time % 60 return f'{h:0{2}d}:{m:0{2}d}:{sec:0{2}d}' def solution(play_time, adv_time, logs): play_time = strToTime(play_time) adv_time = strToTime(adv_time) timeArr = [0] * play_time logs = list(map(lambda x: x.split.. 더보기
카카오 2021 기출 - 합승 택시요금 [워셜 플로이드] def solution(numOfPoint, S, A, B, edges) : costs = [[0 if i==j else 1000000000 for i in range(numOfPoint)] for j in range(numOfPoint)] for edge in edges: costs[edge[0]-1][edge[1]-1] = edge[2] costs[edge[1]-1][edge[0]-1] = edge[2] for middlePoint in range(numOfPoint): for start in range(numOfPoint): for end in range(numOfPoint): if middlePoint != start and middlePoint != end and start != end: cos.. 더보기
백준 11559 [bfs] answer = 0 arr = [input() for _ in range(12)] for i in range(12) : arr[i] = list(arr[i]) def bfs(i, j, visited) : target = arr[i][j] q = [[i,j]] dirs = [[1,0],[-1,0],[0,1],[0,-1]] ret = [[i,j]] while q : y ,x = q.pop(0) for dir in dirs: nextY, nextX = y+dir[0], x+dir[1] if nextX >=0 and nextX =0 and nextY < 12 and arr[nextY][nextX] == target and not visited[nextY][nextX]: visited[.. 더보기
프로그래머스 - 거리두기 확인 (카카오 2021 인턴) import math def check(place, p1,p2) : y1, x1 = p1 y2, x2 = p2 if x1 == x2 : if y2 - y1 > 2 : return True if place[y2-1][x1] == 'X' : return True return False elif y1 == y2 : if x2 - x1 > 2 : return True elif place[y1][x2-1] == 'X' : return True return False else : if abs(x2-x1) + y2-y1 > 2: return True if place[y1][x2] == 'X' and place[y2][x1] == 'X' : return True return False def solution(place.. 더보기
프로그래머스 - 테두리 회전하기 2차원 배열 다루는 문제인데,, 의도에 맞게 푼건진 모르겠다. 무슨 의도로 낸 문제일까... 딱히 어려울 거 없이 한큐에 달린 문제 def rotate(q, arr) : y1, x1, y2, x2 = q y1, x1, y2, x2 = y1-1, x1-1, y2-1, x2-1 tmp = arr[y1+1][x1] minimum = tmp for i in range(x1, x2+1) : tmp, arr[y1][i] = arr[y1][i], tmp minimum = minimum if minimum < tmp else tmp for i in range(y1+1, y2+1) : tmp, arr[i][x2] = arr[i][x2], tmp minimum = minimum if minimum < tmp else tm.. 더보기
프로그래머스 - 징검다리 (바위 부수기) def solution(distance, rocks, n): rocks.sort() minDistance, maxDistance = 1, distance current = (minDistance + maxDistance) // 2 while True : cnt = 0 pre = 0 for idx in range(len(rocks)): if rocks[idx] - pre n : break else : pre = rocks[idx] continue if cnt 더보기
릿코드 5 - Longest Palindromic Substring class Solution: def longestPalindrome(self, s: str) -> str: answer = [0, 0] for i in range(1, len(s)-1): l, r = i, i while True : if s[l] == s[r]: l, r = l - 1, r + 1 if l == -1 or r == len(s): l, r = l + 1, r - 1 break else : l, r = l + 1, r - 1 break if answer[1] - answer[0] < r - l: answer = [l, r] for i in range(0, len(s) - 1): if s[i] == s[i + 1]: l, r = i, i + 1 while True : if s[l] == s[r.. 더보기