분류 전체보기 720

2022 KAKAO BLIND RECRUITMENT 2차 코딩테스트 후기

HTTP 통신을 위한 코드를 미리 준비하라고 하여 기출문제를 풀며 작성한 통신 코드를 그대로 들고갔습니다. 저는 주언어가 python이라 그대로 들고갔는데 c++ 나 java를 쓰시는 분들은 python으로 전향하시느라 고생 많이 하시더군요.. 덕분에 자료구조를 남들보다 원활히 다룰 수 있는 위치에서 유리하게 시작할 수 있었던 것 같습니다. 1. CS 20분간 문제를 풉니다. 간단한 지식임이 분명하나.. 예년의 난이도에 비해 많이 어려웠고 비전공자 입장에서 특히 저처럼 취업준비 github 수준의 깊이, 정보처리기사 수준의 지식을 가지고 풀기에는 보기 1, 2개가 모르는게 나와서 좀 까다로웠습니다. 확실히 전공자들은 중간고사, 기말고사에 나올만한 유형의 문제들이라 무난히 풀었다는 의견도 많았습니다. 덕분..

후기 2021.10.07

2022 KAKAO BLIND RECRUITMENT 1차 코딩테스트 후기

이번 하반기 SW 직군으로 구직하기 시작하고 세 번째로 본 코딩 테스트 였습니다. (토스, 당일 오전 라인 등 서류가 필요없는 코딩 테스트만 응시) 5시간 동안 7문제가 주어지는데요. 시중의 코딩 테스트 중에는 가장 어렵다는 소문에 많이 긴장했었으나 올해의 난이도는 예년에 비해 많이 낮았습니다. 기출문제들에 비해 구현력을 많이 요구하지 않고 단순한 방법론으로 풀리는 문제들로 구성이 되었습니다. 1번. 신고 횟수가 일정이상 되는 유저를 배제시키고 신고한 유저에게메일을 보내주는 문제로 dictionary에 id에 따른 신고 횟수와 신고한 user를 저장시켜뒀다가 후에 반환시켜주면 됩니다. 백준에 set-map 자료구조로 분류되는 문제로 실버 3~4 정도의 난이도로 느껴졌습니다. 2번. 진법변환을 하고 문자열..

후기 2021.10.07

[백준][Python] 1613 역사

순서대로 방문하는 문제같은 경우 플로이드 워셜을 많이 쓴다. 최초 1을 써놓고 플로이드 워셜을 통해 갈 수 있는 지점들을 하나하나 1로 바꾸어 주는 전략. import sys input = sys.stdin.readline n, k = map(int, input().split()) matrix = [[0] * n for __ in range(n)] for __ in range(k): a, b = map(lambda x : int(x) - 1, input().split()) matrix[a][b] = 1 for k in range(n): for i in range(n): for j in range(n): if matrix[i][k] and matrix[k][j]: matrix[i][j] = 1 for __..

[백준][Python] 17255 N으로 만들기

기본적으로 문자열을 쌓거나 줄이는 방법은 dfs가 기본이다. 1번풀이 : 하나씩 쌓는 방법 left, right로 하나씩 쌓아가며 이어붙힌다. 다 붙히면 중복 없어지고 종료 import sys input = sys.stdin.readline def dfs(left, right, string): if len(string) == target: answers.add(string) return if left > 0: dfs(left - 1, right, string + N[left - 1:right + 1]) if right < n: dfs(left, right + 1, string + N[left: right + 2]) N = input().rstrip() n = len(N) target = n * (n + ..

[백준][Python] 1727 커플 만들기

일단 n을 무조건 수가 적은쪽으로 통일 시킨 후 dp로 각각 짝을 지어줬을 시 차이가 min인 값을 누적시킵니다. 앞인자는 수가 적은쪽의 인자고 뒤 인자는 수가 많은쪽의 인자입니다. m - (n - 1)은 수가 큰거에서 작은 것을 빼고 1을 더해준 값으로 선택할 수 있는 m쪽 인자의 index 범위를 뜻합니다. import sys input = sys.stdin.readline n, m = map(int, input().split()) boys = list(map(int, input().split())) girls = list(map(int, input().split())) if n > m: boys, girls = girls, boys n, m = m, n dp = [[0] * m for __ in r..

[백준][Python] 20159 동작 그만. 밑장 빼기냐?

짝수 인덱스는 앞에서 부터 누적합을 구하고 홀수 인덱스는 뒤에서 부터 누적합을 구해서 밑장을 내가 가지는 경우와 상대를 주는 경우 두가지에 따라 최댓값을 갱신합니다. import sys input = sys.stdin.readline N = int(input()) x = list(map(int, input().split())) # 0, 2, 4 ... 밑장을 받거나 상대 주거나. 하고 홀수 idx를 받음. even_sum, odd_sum = [0] * (N // 2), [0] * (N // 2) even_sum[0], odd_sum[-1] = x[0], x[-1] for i in range(1, N // 2): even_sum[i] = x[2 * i] + even_sum[i - 1] odd_sum[-i ..

[백준][Python] 1890 점프

도착하는 경우의 수를 check 한다. 각 지점마다 2개의 분기로 나누어 지는걸 고려 dp로 누적시킨다. 이동가능 거리가 0이면 정지하므로 연산하지 않는다. import sys input = sys.stdin.readline N = int(input()) board = [list(map(int, input().split())) for _ in range(N)] dp = [[0] * N for _ in range(N)] dp[0][0] = 1 for row in range(N): for col in range(N): if not board[row][col]: continue jump = board[row][col] if col + jump < N: dp[row][col + jump] += dp[row][c..

[백준][Python] 1823 수확

각 value, cnt를 축으로 둔 2차원 dp를 통해 하나씩 고르는 경우의 수를 check해주었습니다. 이전에 수확한게 왼쪽인지 오른쪽인지 각각 수확량의 최댓값을 취하며 계산해 주었습니다. import sys input = sys.stdin.readline N = int(input()) v = [0]+[int(input()) for _ in range(N)] dp = [[v[i] * N if i == j else 0 for i in range(N + 1)] for j in range(N + 1)] for left in range(1, N + 1): for right in range(left - 1, 0, -1): dp[right][left] = max(dp[right + 1][left] + v[righ..

[백준][Python] 1622 공통순열

아직 EOF 다루는게 익숙하지 않다. 예외처리에 대해 공부해야 할 듯. from collections import defaultdict while True: try: a=input() b=input() alpha1=defaultdict(int) alpha2=defaultdict(int) ans='' for s in a: alpha1[s]+=1 for s in b: alpha2[s]+=1 s = [] for char in alpha1: if char in alpha2: s.append(char) s.sort() for char in s: ans += char*min(alpha1[char],alpha2[char]) print(ans) except: break