분류 전체보기 310

[프로그래머스] 신고 결과 받기 - Python

해당 문제는 2022 KAKAO BLIND RECRUITMENT 에서 출제된 문제다. 마지막 출력되는 값은 유저가 신고한 유저 중 몇 명이 정지 되었는지에 대한 값을 반환한다. 한 유저가 동일한 유저에게 여러번 신고한 경우에는 모두 한 번으로 처리하고, K개의 임계값(Threshold)이 주어진다. def solution(id_list, report, k): froud_by = dict({key:[] for key in id_list}) counts = dict({key:0 for key in id_list}) idx_info = dict({key:i for i, key in enumerate(id_list)}) answers = [0] * len(id_list) for val in report: src..

Python/Algorithm 2023.08.24

[프로그래머스] 크레인 인형뽑기 게임 - Python

크레인 인형뽑기 게임 문제는 2019 카카오 개발자 겨울 인턴십에 나온 문제다. 크레인에서 인형을 뽑아 새로운 칸에 집어놓고 순서대로 일치되면 제거하고, 제거된 인형의 갯수를 출력하는 문제다 def solution(board, moves): nrow, ncol = len(board), len(board[0]) answer = [] counts = 0 for m in moves: for i in range(nrow): if board[i][m-1]: answer.append(board[i][m-1]) board[i][m-1] = 0 break if len(answer) > 1: if answer[-2] == answer[-1]: answer = answer[:-2] counts += 2 return cou..

Python/Algorithm 2023.08.24

[프로그래머스] 키패드 누르기 - Python

이번 문제는 2020년 카카오 인턴 코딩 테스트에 나온 문제다. num2key는 번호를 누르면 해당 좌표로 변환하는 코드를 의미한다. 1~9까지는 수식으로 정의하였고, 0의 경우 (3,1) 좌표를 리턴하는 형태로 지정했다. [1, 4, 7]에 해당하는 키패드는 왼손으로 먼저 클릭하고, [3, 6, 9]에 해당하는 키패드는 오른손으로 먼저 클릭해야 하기 때문에, [2, 5, 8, 0]에 해당하는 값만 잘 설정하면 된다. [2, 5, 8, 0]에서는 왼손과 오른손의 현재 위치에 따라 달리 클릭되기 때문에 클릭될 때마다 좌표값을 받아서 왼손 혹은 오른손의 좌표를 기억하고, 만약 같은 경우 두 값의 차이를 바탕으로 어느 손으로 클릭할 지 처리할 수 있다. 만약 두 값의 차이가 같다면, 왼손 잡이인지 오른손 잡이..

Python/Algorithm 2023.08.24

[프로그래머스] 성격 유형 검사 - Python

해당 문제는 2022년 카카오 코딩 테스트에 나온 문제다. 내가 접근한 방식은 먼저 각 index를 저장하는 리스트와 딕셔너리를 생성하고, survey를 입력으로 받아서 분류하는 형태로 진행하였다. def solution(survey, choices): types = ['R', 'T', 'C', 'F', 'J', 'M', 'A', 'N'] answers = [0] * len(types) results = {t:i for i, t in enumerate(types)} for s, value in zip(survey, choices): a, b = s if value >= 4: answers[results[b]] += value - 4 else: answers[results[a]] += 4 - value o..

Python/Algorithm 2023.08.24

[프로그래머스] 공원 산책 - Python

공원 산책과 같은 문제는 종종 코테에 나오는 것 같아서 리뷰를 할 예정이다. 구구절절 문제가 길어보지만, 조건문을 달아서 쉽게 풀이할 수 있다. 먼저, S, O, X로 된 입력 문장을 풀이하기 쉽게 숫자로 변환하는 과정이 필요하다. X는 1로 설정하고, S, O는 0으로 설정하면 아래와 같이 코딩할 수 있다. def solution(park, routes): nrow, ncol = len(park)-1, len(park[0])-1 coord = [] for i in range(nrow+1): rows = [] for j in range(ncol+1): idx = park[i][j] if idx == 'S': row, col = i, j rows.append(0) elif idx == 'X': rows.a..

Python/Algorithm 2023.08.24

[프로그래머스] 달리기 경주 - Python

문제를 살펴보면 단순히 역전한 결과를 스왑(swap)하면 되지 않을까 라고 생각해서, list를 이용하여 아래와 같이 문제를 풀어보았다. # 시간초과 def solution(players, callings): for calls in callings: idx = players.index(calls) values = players.pop(idx) players.insert(idx-1, values) return players def solution(players, callings): for calls in callings: idx = players.index(calls) players[idx-1], players[idx] = players[idx], players[idx-1] return players Ru..

Python/Algorithm 2023.08.24

[OpenCV] Image Cropping

데이터 증강(Data Augmentation)을 위해 이미지를 자를 수도 있고, 특정 영역에 대한 바운딩 박스(Bounding Box)를 가지고 오기 위해 이미지를 자를 수 있다. 이때 가장 간단한 방법은 Height과 Width를 지정해서 해당 범위에 대한 영역만 잘라오는 것이다. def cropping(img, x, y, h=16, w=16): H, W, C = img.shape w_start = np.min([x, 0]) w_end = np.min([x+w, W]) h_start = np.min([y, 0]) h_end = np.min([y+h, H]) cropped_img = img[h_start:h_end, w_start:w_end].copy() return cropped_img def load..

Python/OpenCV 2023.07.06

[OpenCV] Image Registration Processing

Image Registration은 동일한 장면의 서로 다른 이미지를 정렬하는데 사용하는 기술 중 하나이다. 고정된 이미지(Fixed Image)가 있고, 움직인 이미지가 있다면, 움직인 이미지를 고정된 위치로 옮기는 것을 말한다. 이미지가 회전되어 있거나, 일부 잘려있거나 할 때도 사용이 가능하다. Image Registration을 수행하기 위해 MVTec AD Dataset을 예시로 가지고 왔다. import os, sys, cv2, glob import matplotlib.pyplot as plt paths = glob.glob(os.path.join('dataset/hazelnut/train/good/*.png')) path = paths[0] imgs = cv2.imread(path) imgs..

Python/OpenCV 2023.07.05
반응형