본문 바로가기

코딩테스트63

[파이썬] 카펫 [CODING TEST #27] https://school.programmers.co.kr/learn/courses/30/lessons/42842 yellow가 1 이상이라는 건 가로와 세로의 최소 길이가 3이라는 것을 의미한다. 그리고 가로와 세로의 곱은 직사각형 전체의 넓이 (가로 - 2) 와 (세로 - 2)의 곱은 yellow의 넓이 두 넓이조건과 최소 길이가 3임을 이용, 답을 찾을 때까지 while문을 반복한다. def solution(brown, yellow): xy = brown + yellow # 넓이 num = 3 while xy//num >= 3: # yellow가 존재하려면 한 변의 길이가 3 이상 if xy % num == 0 and (xy//num - 2) * (num - 2) == yellow : # 넓이 조건.. 2022. 7. 29.
[파이썬] 다트 게임 - 2018 KAKAO BLIND RECRUITMENT [CODING TEST #26] https://school.programmers.co.kr/learn/courses/30/lessons/17682 re 패키지를 이용하여 S,D,T에 대해 나누고, score 리스트에 제곱할 숫자 1,2,3을 먼저 할당한다. dartlist 리스트는 보너스와 점수가 합쳐진 문자열로 구성된다. 이렇게 나눈 케이스의 경우, 보너스는 해당 인덱스가 아니라 이전 인덱스에 저장된 점수가 해당 횟수에 적용된다. 어떠한 케이스에도 점수의 배수인 S,D,T가 포함될 뿐만 아니라, 두 자리 숫자인 10점 또한 인덱싱으로 쉽게 얻어오기 위해 이 방법으로 진행했다. enumerate를 이용해서 보너스 #,*가 있는지 없는지를 잘 구분하여 점수를 제곱하고 보너스를 적용시키면 된다. 점수를 먼저 제곱하면, 보너스가 어떤 순서로.. 2022. 7. 29.
[파이썬] 비밀지도 - 2018 KAKAO BLIND RECRUITMENT [CODING TEST #25] https://school.programmers.co.kr/learn/courses/30/lessons/17681 이 문제를 읽었을 때 딱 봐도 파이썬 이진수 변환을 이용해서 푸는 것이 좋을 것 같아 공부해볼 겸 찾아보았다. bin() 내장함수를 이용해서 간단하게 이진수로 바꾸어서 앞에 붙는 '0b'를 슬라이싱으로 제거한다. 그리고 zfill(n) 함수로 앞의 모자란 자리수를 0으로 채운 뒤, replace() 함수로 1을 '#'로, 0을 ' '로 치환한다. 각 arr의 row마다 반복하면 된다. def solution(n, arr1, arr2): answer = [] for i in range(n): temp = bin(arr1[i] | arr2[i]) temp = temp[2:].zfill(n) te.. 2022. 7. 29.
[파이썬] 같은 숫자는 싫어 [CODING TEST #24] https://school.programmers.co.kr/learn/courses/30/lessons/12906 들어온 숫자가 answer 마지막 숫자와 같으면 생략. 이후 인덱스 에러가 나서 answer 길이가 1 이상인 조건을 추가했다. 다르면 answer에 append. def solution(arr): answer = [] for num in arr: if len(answer)>0 and num == answer[-1]: continue else: answer.append(num) return answer 2022. 7. 29.
[파이썬] 캐시 - 2018 KAKAO BLIND RECRUITMENT [CODING TEST #23] https://school.programmers.co.kr/learn/courses/30/lessons/17680 LRU나, Cache hit나, Cache miss? 문제를 한참동안 살펴봤다. 처음 들어보는 것들이기는 한데 원래 카카오가 설명을 안해주던가?? 참다 참다 검색해봤는데, 별건 아니었다. 한 번 본 단어들은 Cache에 저장되고, 이후 들어오는 단어가 Cache에 있으면 실행 시간이 단축되고 그 단어가 Cache의 가장 앞으로 오는 알고리즘이 LRU이다. 새로운 도시가 들어오면 가장 나중에 들어온 도시가 Cache에서 빠져야 된다. 근데 리스트는 맨 앞의 원소를 빼는 게 없으니 큐를 이용하였다. 검색해서 찾아보니 list.pop(index) 함수를 이용해서 리스트 내 원하는 인덱스의 원소를 .. 2022. 7. 27.
[파이썬] 행렬 테두리 회전하기 - 2021 Dev-Matching: 웹 백엔드 개발자 [CODING TEST #22] https://school.programmers.co.kr/learn/courses/30/lessons/77485 queries마다 루프를 돌면서 왼쪽 모서리부터 밀기로 생각했다면 왼쪽 위 값이 밀려 사라지기 때문에 마지막에 갱신할 수가 없으니 왼쪽 위 값을 temp에 저장한다. 그리고 왼쪽 / 아래 / 오른쪽 / 위 순서대로 밀고, 밀면서 만난 값들 중 최솟값을 실시간으로 저장한다. 잘 풀었는데 board 리스트 만드는 걸 columns * j로 안하고 row * j로 해버리는 탓에 계속 못풀고 있었다. ㅠ def solution(rows, columns, queries): answer = [] board = [[columns * j + i + 1 for i in range(columns)] for j.. 2022. 7. 27.
[파이썬] 타겟 넘버 [CODING TEST #21] https://school.programmers.co.kr/learn/courses/30/lessons/43165 DFS로 해결했다. +number와 -number로 진행해서 끝까지 갔을 때 target과 일치하면 answer의 값이 1 증가하도록 함. def dfs(numbers, target, length): answer=0 if length==len(numbers): # 마지막 도착 if sum(numbers) == target: # Target과 일치? return 1 else: return 0 else: answer += dfs(numbers,target,length+1) # +number numbers[length] *= -1 answer += dfs(numbers,target,length+1.. 2022. 7. 27.
[파이썬] 거리두기 확인하기 - 2021 카카오 채용연계형 인턴십 [CODING TEST #20] https://school.programmers.co.kr/learn/courses/30/lessons/81302#fn1 모든 'P'점에 대해 탐색을 수행해야 하므로 BFS를 사용했다. 사람의 위치를 person 리스트에 담고, queue = deque([start])를 만들어서 거리두기에 걸리는 케이스를 모두 찾는다. distance는 실시간으로 start로부터의 거리를 저장하는 리스트이고, visited는 방문 여부를 저장하는 리스트이다. 한 번 방문한 위치는 다시 가지 않는다. 그래서 테이블 'O'이면 visited를 1로 만들고 distance를 1 증가시키고, deque에 그 점을 push한다. 만일 사람 'P'를 만났는데 거리 제한에 걸렸다면 거리두기를 지키지 않은 것. 0을 반환한다. que.. 2022. 7. 26.
[파이썬] 프렌즈4블록 - 2018 KAKAO BLIND RECRUITMENT [CODING TEST #19] https://school.programmers.co.kr/learn/courses/30/lessons/17679 def solution(m, n, board): answer = 0 for i in range(len(board)): pop_list = board.pop(0) board.append([p for p in pop_list]) while True: where_is_22 = [] for i in range(m-1): for j in range(n-1): if board[i][j] == '0': continue if board[i][j] == board[i][j+1] and board[i][j] == board[i+1][j] and board[i][j] == board[i+1][j+1]: wher.. 2022. 7. 26.
728x90