알고리즘&자료구조 7

[프로그래머스] 멀쩡한 사각형 - Python

멀쩡한 사각형 가로 길이가 Wcm, 세로 길이가 Hcm인 직사각형 종이가 있습니다. 종이에는 가로, 세로 방향과 평행하게 격자 형태로 선이 그어져 있으며, 모든 격자칸은 1cm x 1cm 크기입니다. 이 종이를 격자 선을 따라 1cm × 1cm의 정사각형으로 잘라 사용할 예정이었는데, 누군가가 이 종이를 대각선 꼭지점 2개를 잇는 방향으로 잘라 놓았습니다. 그러므로 현재 직사각형 종이는 크기가 같은 직각삼각형 2개로 나누어진 상태입니다. 새로운 종이를 구할 수 없는 상태이기 때문에, 이 종이에서 원래 종이의 가로, 세로 방향과 평행하게 1cm × 1cm로 잘라 사용할 수 있는 만큼만 사용하기로 하였습니다. 가로의 길이 W와 세로의 길이 H가 주어질 때, 사용할 수 있는 정사각형의 개수를 구하는 solut..

[프로그래머스] 124나라의 숫자 - Python

문제 설명 124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다. 124 나라에는 자연수만 존재합니다. 124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다. 예를 들어서 124 나라에서 사용하는 숫자는 다음과 같이 변환됩니다. 10진법124 나라10진법124 나라 1 1 6 14 2 2 7 21 3 4 8 22 4 11 9 24 5 12 10 41 자연수 n이 매개변수로 주어질 때, n을 124 나라에서 사용하는 숫자로 바꾼 값을 return 하도록 solution 함수를 완성해 주세요. 제한사항 n은 500,000,000이하의 자연수 입니다. 입출력 예 nresult 1 1 2 2 3 4 4 11 나의 풀이 패턴을 코드로 옮겨보는 데서 ..

[프로그래머스] k번째 수

문제 설명 배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다. 예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면 array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다. 1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다. 2에서 나온 배열의 3번째 숫자는 5입니다. 배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요. 제한사항 array의 길이는 1 이상 100 이하입니다. a..

프로그래머스 - 더 맵게(Python/파이썬)

문제 설명 매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같이 특별한 방법으로 섞어 새로운 음식을 만듭니다. 섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2) Leo는 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복하여 섞습니다.Leo가 가진 음식의 스코빌 지수를 담은 배열 scoville과 원하는 스코빌 지수 K가 주어질 때, 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 섞어야 하는 최소 횟수를 return 하도록 solution 함수를 작성해주세요. 제한 사항 scovill..

[Java][트리] Leetcode - 116. Populating Next Right Pointers in Each Node

Populating Next Right Pointers in Each Node - LeetCode Populating Next Right Pointers in Each Node - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 완전 이진트리를 가지고 푸는 문제로, 재귀 없이 BFS적으로 접근하면서 풀 수 있다. 문제의 번역은 아래와 같다. 완전 이진 트리는 리프(끝 노드)가 모두 같은 레벨에 있고, 모든 부모 노드는 두 개의 자식 노드를 가진다. 한 마디로, 모..

정렬 알고리즘 (Do it! 자바편 정리)

아래의 내용은 Do it! 시리즈 중 '자료구조와 함께 배우는 알고리즘 입문 자바편' 의 6장을 요약한 내용입니다. 정렬 정렬은 핵심 항목(key)의 대소관계에 따라 데이터 집합을 일정한 순서로 줄지어 늘어서도록 바꾸는 작업. 정렬은 대표적인 알고리즘이 8개가 있으며, 안정된 알고리즘과 그렇지 않은 알고리즘으로 나뉜다. 내부 정렬 & 외부 정렬 내부 정렬: 하나의 배열에서 작업할 수 있는 경우 외부 정렬: 하나의 배열에서 작업할 수 없는 경우 책에서 다루는 모든 정렬은 내부 정렬이다. 정렬 알고리즘의 핵심 요소 교환, 선택, 삽입. 버블 정렬 버블 정렬은 이웃한 두 요소이 대소 관계를 비교하여 교환을 반복한다. 한쪽 끝에서부터 인접한 두 요소를 비교하면서 오름차순이면 큰 걸 뒤로, 내림차순이면 작은 걸 ..

Java로 큐, 스택 이용하기

스택 & 큐 알고리즘과 자료구조를 공부하면서 스택과 큐라는 자료구조를 익히게 되었는데, 관련하여 온라인에 있는 알고리즘문제를 보니 이전에는 이 두 가지 자료구조를 사용하지 않고 단순하게 배열로 접근하여 풀었던 흔적이 있었다. 42의 경우에도, 워낙 백지 상태에서 만드는 훈련을 시키다보니, 특정 자료구조를 만들어서 효율을 극대화 시키기 보다는 내가 이해할 수 있는 방향으로 무식하게(?) 푸는 것에 익숙해져있어서 배열로만 풀어오던 것이 습관이 되어버린 것 같다. 다행이도, 자바의 경우는 java.util 에서 스택과 큐를 클래스, 인터페이스 등으로 제공해주고 관련 메서드도 모두 포함되어 있기 때문에 죄책감을 느끼지 않고 마구마구 활용해도 좋다! 스택 스택(stack)은 후입선출의 구조를 가진 자료구조다. 클..