전체 글 310

[프로그래머스] 비밀지도 - Python

해당 문제는 2018 KAKAO BLIND RECRUITMENT에서 출제된 문제다. 프로그래머스 기준 Lvel 1에 해당하는 문제로 10진법을 2진법으로 변환하여 해결할 수 있다. def GetMap(arr1, arr2): answer = '' for a1, a2 in zip(arr1, arr2): if a1 == '0' and a2 == '0': answer += ' ' else: answer += '#' return answer def solution(n, arr1, arr2): answer = [] array1, array2 = [], [] for a1, a2 in zip(arr1, arr2): a1 = bin(a1)[2:].rjust(n, '0') a2 = bin(a2)[2:].rjust(n, '..

Python/Algorithm 2023.09.03

[프로그래머스] 오픈채팅방 - Python

해당 문제는 2019 KAKAO BLIND RECRUITMENT에 출제된 문제다. 프로그래머스 기준 Level 2에 해당하며, 다음과 같이 풀 수 있다. def solution(record): answer = [] user_list = {} for rec in record: v = rec.split() if v[0] in ['Enter', 'Change']: user_list[v[1]] = v[2] for rec in record: v = rec.split() if v[0] == 'Enter': answer.append(f'{user_list[v[1]]}님이 들어왔습니다.') elif v[0] == 'Leave': answer.append(f'{user_list[v[1]]}님이 나갔습니다.') retur..

Python/Algorithm 2023.09.03

[프로그래머스] 실패율 - Python

이번 문제는 2019 KAKAO BLIND RECRUITMENT 에서 출제된 문제다. 프로그래머스 기준 Level 1에 해당하는 문제로, 쉽게 풀 수 있다. def solution(N, stages): results = {} length = len(stages) for n in range(1, N+1): if length != 0 : count = stages.count(n) results[n] = count / length length -= count else: results[n] = 0 return sorted(results, key=lambda x: results[x], reverse=True) 각 스테이지별 실패율을 표시하고, 실패율이 일치하는 경우 스테이지가 낮은 순서대로 정렬하면 된다. 스테이..

Python/Algorithm 2023.09.02

[프로그래머스] 이모티콘 할인행사 - Python

이번 문제는 2023 KAKAO BLIND RECRUITMENT 에서 출제된 문제다. 프로그래머스 기준 난이도 Level 2에 해당하는 문제로, 완전탐색(Brute-Force Search, BFS) 문제로 접근할 수 있다. 문제 설명 요약을 하자면, 카카오톡 이모티콘 플러스 서비스 가입자 수를 최대로 늘리는 것이 첫 번째 목적이고, 이모티콘 판매액을 최대한 늘리는 것이 두 번째 목적이다. n명의 카카오톡 사용자에게 m개의 이모티콘을 할인해서 판매하는데, 이때 할인율은 10%, 20%, 30%, 40% 중 하나로 설정된다. 각 할인율에 따라 목적1, 목적2를 달성하는 값을 출력하는 문제다. from itertools import product def solution(users, emoticons): emg..

Python/Algorithm 2023.09.02

[프로그래머스] 숫자 변환하기 - Python

해당 문제는 bfs를 통해 문제를 해결하는 방식이다. bfs (Breadth-First Search)는 너비 우선 탐색으로 하나의 정점으로 부터 시작하여 차례대로 모든 정점들을 한 번씩 방문하는 것이다. 예를 들어, 특정 도시에서 다른 도시로 갈 수 있는지 없는지 판단할 때 사용할 수 있다. 시작 정점으로부터 가장 가까운 정점에 먼저 방문하고, 멀리 떨어져 있는 정점을 나중에 방문하는 방식으로, 두 노드 사이의 최단 경로 혹은 임의의 경로를 찾고 싶을 때 이를 사용한다. 해당 문제는 두 노드 즉, x, y 간의 최단 경로를 찾는 문제로 해석할 수 있다. def solution(x, y, n): answer = 0 s = set() s.add(x) while s: if y in s: return answe..

Python/Algorithm 2023.08.27

[프로그래머스] 뒤에 있는 큰 수 찾기 - Python

해당 문제는 배열의 각 원소들에 대해 자신보다 뒤에 있는 숫자 중에서 자신보다 크면서 가장 가까이 있는 수를 찾는 문제다. 처음에는 이중 for문으로 문제를 풀게 되는데, 이 방식으로 접근하면 시간 초과가 발생한다. def solution(numbers): results = [-1] * len(numbers) for idx in range(len(numbers)-1): values = numbers[idx] for j in numbers[idx+1:]: if values < j: results[idx] = j break return results 다른 풀이 방식은 Stack으로 문제를 푸는 것이다. stack은 먼저 -1로 된 빈 공간을 생성한다. 그런 다음, while문을 조건으로 달 수 있다. whi..

Python/Algorithm 2023.08.27

[프로그래머스] 주차 요금 계산 - Python

2022 KAKAO BLIND RECRUITMENT 에서 출제된 문제로, 규칙을 지정하여 푸는 방식이다. 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/92341 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 입출력 예 fees = [180, 5000, 10, 600] records = ["05:34 5961 IN", "06:00 0000 IN", "06:34 0000 OUT", "07:59 5961 OUT", "07:59 0148 IN", "18:59 0000 IN", "19:09 0..

Python/Algorithm 2023.08.25

[프로그래머스] 신고 결과 받기 - 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
반응형