프로그래머스 택배상자 - Stack 활용 문제 풀이

문제 링크 프로그래머스 택배상자 간단한 문제 설명 메인 컨테이너 벨트를 타고 상자들이 순서대로 전달됩니다. 이 상자들을 서브 컨테이너 벨트를 사용하여 트럭에 전달하는 문제입니다. 메인 컨테이너 벨트로 상자들이 1, 2, 3, 4, 5 순서로 전달됩니다 트럭에서 상자를 쌓고 싶은 순서는 다릅니다 서브 컨테이너 벨트에 stack 방식으로 상자를 보관할 수 있습니다 상자들은 마지막에 넣은 것을 가져와 트럭에 실을 수 있습니다 간단한 예시 트럭에 실어야 하는 순서가 [2, 4, 5, 3, 1]이라고 한다면: ...

June 29, 2023 · Lee WooJin

프로그래머스 프렌즈 4블록 - 2x2 블록 제거 시뮬레이션

문제 정의 2x2 블록 안에 같은 문자열이 존재할 때 블록을 삭제하여 삭제된 모든 블록의 개수를 반환하는 문제입니다. 중학교 때 애니팡을 많이 했었는데, 이 문제를 보니까 살짝 추억이 생각나네요. 과거에 했던 게임이라 그런지 문제를 이해하는 데 크게 어려움은 없었던 문제였습니다. 문제 해결 아이디어 4칸을 조회할 수 있는 배열 만들기 x, y 좌표 완전 탐색 4칸 모두 일치하면 좌표 저장 중복되는 좌표 제거 board의 좌표 제거 제거할 좌표가 존재하지 않을 때까지 위의 과정 반복 주의 사항 우선 전부 탐색해서 삭제해야 할 좌표를 찾아서 한 번에 삭제해줘야 합니다 중복되는 좌표 중복 제거하기 코드 작성 sq = [[0, 0], [0, 1], [1, 0], [1, 1]] # 이동 배열 만들기 def solution(m, n, board): answer = 0 board = [list(i)[::-1] for i in zip(*board)] # x축 y축 뒤집기 while True: # 제거할 좌표 없을 때까지 반복 remove_list = set() for i in range(n - 1): for j in range(m - 1): # board 완전 탐색 try: now = board[i][j] for x, y in sq: # 4칸 모두 if now != board[i + x][j + y]: break else: # 모두 일치 시 제거할 좌표 추가 for x, y in sq: remove_list.add((x + i, y + j)) except: pass if len(remove_list) == 0: break remove_list = list(remove_list) remove_list.sort(key=lambda x: -x[1]) # pop을 할 때 위에서부터 해야 원하는 idx를 제거할 수 있습니다 for x, y in remove_list: answer += 1 board[x].pop(y) return answer 핵심 포인트 set()을 사용하여 중복 좌표 제거 배열을 transpose하여 x축/y축을 뒤집어 처리 pop() 시 인덱스 문제를 해결하기 위해 y좌표 내림차순 정렬 삭제할 좌표를 모두 찾은 후 한 번에 삭제

May 15, 2023 · Lee WooJin

프로그래머스 길 찾기 게임 - 이진 트리 자료구조로 풀기

문제 링크 프로그래머스 길 찾기 게임 문제 설명 x, y 좌표로 이루어진 이진 트리의 맵에서 전위 순회, 후위 순회 방식으로 순회한 노드의 번호들을 반환하는 문제입니다. 문제 해결 방법 이 문제를 해결하기 위해서 트리 자료구조를 만들어서 문제를 해결했습니다. 트리 자료구조 만들기 class Node: def __init__(self, x, y, value=None, left=None, right=None, parent=None): self.x = x self.y = y self.value = value self.left = left self.right = right self.parent = parent 필드 구성: x와 y 좌표 자식 노드를 저장할 left, right 부모 노드를 가리키는 parent 필드 노드를 추가하는 방식 노드 추가 방식은 양방향 링크드 리스트와 유사하게 작성했습니다. ...

May 13, 2023 · Lee WooJin

프로그래머스 양궁대회 - 완전 탐색으로 최적의 화살 배치 찾기

양궁대회 문제 분석하기 해당 문제는 라이언과 어피치가 n개의 화살을 쏴서 라이언이 가장 큰 점수 차로 이긴 배열을 반환하는 문제입니다. 첫 번째 조건 라이언은 챔피언이라 어피치에게 핸디캡을 주고 시작합니다. 0~10점까지가 있는데 땅따먹기처럼 하나의 점수는 한 사람만 점수를 획득할 수 있습니다. 예를 들어 10점을 어피치와 라이언이 1발씩 맞춘다면 어피치가 10점을 가져가게 되는 것입니다. 그렇기에 점수를 획득하려면 무조건 어피치 + 1의 화살을 맞춰야 하는 것입니다. 두 번째 조건 가장 큰 점수 차가 2개 이상이라면 점수가 낮은 배열순으로 많이 맞춘 배열을 선택합니다. ...

May 10, 2023 · Lee WooJin

프로그래머스 후보키 - 조합과 부분집합으로 해결하기

문제 링크 프로그래머스 후보키 문제 설명 이 문제는 데이터베이스에서 관계형 데이터의 후보키(candidate key)를 찾는 문제입니다. 데이터베이스에서는 후보키(candidate key)라는 개념을 사용하여 테이블에서 튜플을 유일하게 식별할 수 있는 속성 또는 속성의 집합을 의미합니다. 후보키의 조건 후보키는 다음 조건들을 만족해야 합니다: 1. 유일성 유일성은 데이터베이스의 모든 ROW 중에 유일하게 존재해서 식별이 가능한 값을 의미합니다. 2. 최소성 최소성은 후보키로 선택된 속성(Attribute) 집합에서 어떤 속성 하나를 제외하거나 두 개 이상의 속성을 합쳐서도 여전히 유일성이 보장되는 속성 집합을 말합니다. ...

May 7, 2023 · Lee WooJin