반응형

알고리즘 24

[leetcode] 169. Majority Element

문제 배열에서 특정 요소가 과반수 이상 등장하는 경우 그 요소를 찾는 문제입니다. 과반수 요소는 배열의 길이 n의 절반 이상 등장하는 요소로 정의됩니다. 주어진 배열 nums에서 과반수 요소를 찾는 문제입니다. 과반수 요소는 항상 존재한다고 가정합니다.  풀이해당 문제는 Hash Map를 이용해서 풀 수 있습니다. 하지만 이 문제의 추가 조건으로 로 “문제를 O(n) 시간 복잡도와 O(1) 공간 복잡도로 해결할 수 있는지”가 주어졌습니다. Hash Map를 이용하면 공간복잡도가 O(n)으로 해당 조건을 만족할 수 없습니다. 해당 조건에 맞춰 문제를 해결하려면  Boyer–Moore majority vote algorithm를 이용하여 풀 수 있습니다.Boyer–Moore majority vote algo..

알고리즘 2024.10.27

[프로그래머스] 체육복

문제풀이level1 문제답게 쉬운 문제입니다.여벌 체육복을 가져온 학생이 체육복을 도난당했을 수 있으므로 중복된 요소는 제거합니다. 체육복을 빌릴 수 있는 학생을 찾습니다.최종적으로 수업을 들을 수 있는 학생 수를 구합니다.  코드그리디 문제답게 처음에는 좀 멍청하게 풀고 이후에 개선하였습니다. 초기 풀이법초기에는 lost와 reserve 리스트를 반복하면서 일치하는 항목을 제거하는 방식을 사용했었습니다.그 후, lost 리스트의 학생들에게 체육복을 빌려줄 수 있는 학생을 reserve 리스트에서 찾아 제거하는 방식으로 문제를 해결했습니다.def solution(n, lost, reserve): reserve.sort() lost.sort() remove_count = 0 to_re..

알고리즘 2023.08.09

[프로그래머스] 여행경로

문제 풀이 1. 주어진 항공권을 도착지를 기준으로 정렬합니다. 2. 항공권 정보를 그래프로 변환합니다. 3. "ICN"에서 시작하여 DFS (깊이 우선 탐색)을 수행하여 경로를 찾습니다. 파이썬을 공부하면서 풀어서 정렬하는 방법에 대해서 새롭게 알게 되었습니다. 다음에 기회가 되면 더 자세히 정리하겠지만 간단하게 살펴보겠습니다. 항공권을 도착지 기준으로 오름차순 정렬을 해야해서 아래와 같이 sorted() 내장함수를 이용했습니다. sorted(tickets, key=lambda x: x[1]) key 매개변수는 정렬 기준을 지정하는 데 사용되며, 여기에는 함수가 전달됩니다. lambda는 파이썬에서 익명 함수를 정의하는 키워드입니다. 익명 함수는 이름 없이 정의되는 간단한 함수입니다. x는 lambda ..

알고리즘 2023.08.08

[leetcode] 1137. N-th Tribonacci Number

문제 주어진 문제는 Tribonacci 수열에서 n번째 항의 값을 구하는 것입니다. Tribonacci 수열은 이전 3개의 항을 더한 값으로 다음 항을 계산하는 특징을 가지고 있습니다. 풀이 주어진 문제를 해결하기 위해 다이나믹 프로그래을 활용할 수 있습니다. 다이나믹 프로그래밍은 중복되는 계산을 피하기 위해 계산 결과를 저장하여 재활용하는 기법입니다. Tribonacci 수열의 n번째 항의 값을 구하기 위해 다음과 같은 접근 방식을 사용합니다: 초기값 설정: dp 리스트를 생성하고 초기값으로 dp[0] = 0, dp[1] = 1, dp[2] = 1을 설정합니다. 반복문을 통한 값 계산: dp[i] = dp[i-3] + dp[i-2] + dp[i-1]을 반복문을 통해 계산하여 dp[n]의 값을 구합니다...

알고리즘 2023.07.22

[leetcode]345. Reverse Vowels of a String

문제 주어진 문자열에서 모음(vowels)들만 뒤집어 반환하는 문제입니다. 모음은 'a', 'e', 'i', 'o', 'u' 다섯 가지로 구성되어 있으며, 대소문자를 구분하지 않습니다. 풀이 문자열을 처리하기 위해 투포인터를 활용하여 문제를 해결할 수 있습니다. 주어진 문자열을 리스트로 변환합니다. 이렇게 하면 문자열의 각 문자에 직접 접근하여 값을 변경할 수 있습니다. 파이썬에서 문자열은 불변한 자료형이므로 리스트로 변환하여 가변한 형태로 다루는 것이 유용합니다. 왼쪽 인덱스(left_index)를 문자열의 시작 위치(0)로, 오른쪽 인덱스(right_index)를 문자열의 끝 위치(len(s) - 1)로 초기화합니다. 왼쪽 인덱스와 오른쪽 인덱스가 만나기 전까지 다음 작업을 반복합니다: 만약 왼쪽 인..

알고리즘 2023.07.21

[leetcode] 205. Isomorphic Strings

문제 풀이 주어진 두 문자열이 Isomorphic 이면 true를 반환, 아니면 false를 반환하면 되는 문제 map를 하나 생성해서 두 문자열을 매핑하고 비교하면 된다. 하지만 한 가지 주의해야 할 점은 두 문자가 같은 문자에 맵핑될 수 없다는 점이다. 즉 아래와 같은 경우는 o가 a와 r에 매핑되므로 false가 반환되어야 한다. f -> b o -> a o -> r 아래와 같은 경우 역시 b와 d가 b에 매핑되고 a와 c가 a에 매핑되므로 false가 반환되어야 한다. b -> b a -> a d -> b c -> a s -> t 로 매핑되는 맵과 t -> s 로 매핑되는 맵 2가지를 만들어서 계산하면 위 같은 케이스를 구분할 수 있다. 그런데 자바 HashMap에는 값이 있는 지 확인할 수 있는..

알고리즘 2023.01.10
반응형