728x90
반응형

파이썬 77

[프로그래머스 / python / Level 2] 압축

2018 KAKAO BLIND RECRUITMENT에 출제된 문제이다. 구현, 문자열 문제이고 문제 조건이 크게 어려운 건 아닌데, 구현 문제다 보니까 디테일한 부분에서의 실수가 없도록 주의해야 하는 문제이다. def solution(msg): """인덱스 -> 문자열, 문자열 -> 인덱스 사전 제작""" idx_to_str = [''] + [chr(i) for i in range(ord('A'), ord('Z') + 1)] str_to_idx = dict() for i in range(26): char = chr(ord('A') + i) str_to_idx[char] = i + 1 """메인 로직, 문자열을 전부 압축할 때..

[프로그래머스 / python / Level 2] 프렌즈4블록

2018 KAKAO BLIND RECRUITMENT에 출제된 문제이다. 구현, 시뮬레이션 문제이고 블럭을 떨어뜨리는 로직을 구현하는 것이 핵심이다. def solution(m, n, board): """블럭을 제거하는 함수""" def delete_blocks(m, n, board): # 모든 블럭에 대하여 삭제 조건 검사 deleted_blocks = set() for x in range(m - 1): for y in range(n - 1): point = board[x][y] if point == '': ..

[프로그래머스 / python / Level 3] 자물쇠와 열쇠

2020 KAKAO BLIND RECRUITMENT에 출제된 문제이다.구현, 완전탐색 문제이며 보드 확장 아이디어를 떠올리지 못한다면 풀기 까다로울 수 있는 문제이다. def solution(key, lock): """ 90도 회전시키는 함수 자물쇠가 열리는지 확인하는 함수 -> 열쇠를 보드에 적용 + 자물쇠값 모두 1인지 확인 + 열쇠를 보드에서 제거 확장된 보드를 만든다 자물쇠를 보드 중앙에 배치한다 열쇠를 4방향으로 회전시키며, 모든 가능한 위치에서 열기 시도한다 """ """키를 시계 방향으로 90도 회전하는 함수""" def rotate_key(key): return [list(row) for row in zip(..

[프로그래머스 / python / Level 3] 표 병합

2023 KAKAO BLIND RECRUITMENT에 출제된 문제로써, Union-Find가 사용되는 문제이다.Union-Find는 특정 그룹으로 묶고, 나누고, 그룹을 찾고 하는 것에 특화된 알고리즘이며, 표 병합같은 문제에 딱 맞는 알고리즘이다. def solution(commands): """ find: 대표를 찾는 함수, 재귀 구현 union: 병합 함수, merge 구현 """ """1차원 리스트 사용, 처음엔 자기 자신이 대표""" parent = [i for i in range(2601)] values = ["" for _ in range(2601)] # 처음엔 전부 빈 값 """좌표를 1차원 인덱스로 변환하는 함수""" def..

[프로그래머스 / python / Level 3] 양과 늑대

2022 KAKAO BLIND RECRUITMENT 출제 문제이다.BFS가 메인이고 상태 관리 로직이 필요하다. 카카오 문제들은 자료구조의 선택에 대해서도 많이 생각하게 된다. from collections import defaultdict, dequedef solution(info, edges): """인접 딕셔너리 만들기 (부모 -> 자식 단방향)""" graph = defaultdict(list) for parent, child in edges: graph[parent].append(child) """큐 기본값 설정""" # list는 삭제/탐색연산 느려서 set 쓴다 # 어차피 상태관리 visited로 하고 완전탐색이라 순서 상관없기에 s..

Algorithm/BFS 2025.06.06

[프로그래머스 / python / Level 2] 도넛과 막대 그래프

그래프 + 구현 문제이고, 2024 KAKAO WINTER INTERNSHIP 2번 문제이다.분명히 Level 2인데, 레벨보다 훨씬 어렵게 느껴진다. 백준으로 치면 최소 골드 이상 정도는 되지 않나 싶다. def solution(edges): """ 차수 0: 고립된 막대 그래프 차수 1: 막대 그래프의 양 끝 정점 차수 4: 8자 그래프의 중심점 입차수가 0이고 출차수가 2 이상: 생성된 정점 생성된 정점과 연결된 정점의 입차수를 1 빼줘야 한다. """ """각 정점의 입/출차수 계산""" in_degree = dict() out_degree = dict() for a, b in edges: in_d..

카테고리 없음 2025.06.01

[프로그래머스 / python / Level 3] 네트워크

그래프 기초 문제로써, "연결 성분"의 개수를 구하는 문제이다. 즉 연결되지 않은 그래프의 개수를 구하면 된다. 크게 어렵지 않은 문제였다. from collections import dequedef solution(n, computers): table = [[] for _ in range(n)] # 인접리스트 형태 변경 for i in range(n): for j in range(n): if i == j: continue if computers[i][j] == 1: table[i].append(j) visited = [False..

Algorithm/BFS 2025.05.30

[프로그래머스 / python / Level 1] 가장 많이 받은 선물

구현 문제이고, 2024 KAKAO WINTER INTERSHIP 1번으로 출제된 문제다.레벨 1이라 정말 가벼운 마음으로 도전했는데 역시 구현이라 그런지 신경쓸 게 꽤 많아서 어디부터 어떻게 구현해야 할지 갈피를 잡는게 어려웠지만, 풀고 나면 언제나 그랬듯 딱히 어렵지 않게 느껴진다. def solution(friends, gifts): # 더 많은 선물을 준 사람이, 다음 달에 선물을 하나 받는다 # 주고받은 수가 같다면, 선물 지수가 큰 사람이 하나 받는다 # 선물 지수: 자신이 친구들에게 준 선물 수 - 받은 선물 수 -> 즉 내가 더 많이 준 선물 수 # 주고받은 수와 선물 지수 모두 같다면 -> 다음 달에 선물 주고받지 않는다 # 가장 많이 받은 사..

[Baekjoon 6603 / Python / 실버2] 로또

기본적인 백트래킹 문제이다.주어진 집합에서 6개 숫자의 조합(순서가 다른 같은 숫자를 중복으로 간주)을 구해야 한다. # 실버2 -> 백트래킹import sysinput = sys.stdin.readlinedef back_tracking(depth, start, result):    # 6개의 숫자가 모이면 출력    if depth == 6:        print(*result)        return        for i in range(start, len(S)):        result.append(S[i])        back_tracking(depth + 1, i + 1, result)        result.pop()while True:    K, *S = map(int, input..

[Baekjoon 1012 / python / 실버2] 유기농 배추

무난한 BFS 문제이다.상하좌우로 연결된 영역이 몇개인지를 출력하면 된다. # 실버2 -> BFS"""T : 테스트 케이스 개수M : 열 ( 가로길이 )N : 행 ( 세로길이 )K : 심어진 배추 개수table : 1은 배추, 2는 방문한 곳"""from collections import dequeimport sysinput = sys.stdin.readlineT = int(input())dx = [-1, 1, 0, 0]dy = [0, 0, -1, 1]# 테이블 내에 있고, 배추인지 확인하는 함수def going_no_going(nx, ny, table):    if 0 nx N and 0 ny M and table[nx][ny] == 1:        return True    return Fa..

Algorithm/BFS 2025.02.07
728x90
반응형