본문 바로가기
반응형

알고리즘11

[Medium] 두 숫자 더하기 문제: 두 개의 비어 있지 않은 연결 리스트가 주어지며, 이들은 두 개의 음이 아닌 정수를 나타냅니다. 숫자들은 역순으로 저장되 어 있으며, 각 노드는 하나의 숫자를 포함합니다. 두 숫자를 더하고 그 합을 연결 리스트로 반환하세요. 두 리스트의 숫자는 0인 경우를 제외하고 0으로 시작하지 않습니다. 예시1: Input: l1 = [2,4,3], l2 = [5,6,4] Output: [7,0,8] Explanation: 342 + 465 = 807. 예시2: Input: l1 = [0], l2 = [0] Output: [0] 예시3: Input: l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9] Output: [8,9,9,9,0,0,0,1] 제약 조건: 각 연결 리스트의 노드 수는 [1, .. 2024. 4. 3.
[코딩 인터뷰] 배열에서 k번째로 큰 요소 찾기 문제 설명: 정수 배열 nums와 정수 k가 주어질 때, 배열에서 k번째로 큰 요소를 반환하는 함수를 작성하세요. nums에는 중복된 요소가 포함될 수 있으며, k번째로 큰 요소를 찾을 때 중복을 고려합니다. 예를 들어, 배열이 [3,2,3,1,2,4,5,5,6]이고 k=4라면, 배열에서 네 번째로 큰 요소는 4입니다. 입력: nums: 정수 배열 k: 찾고자 하는 순서의 정수 출력: 배열에서 k번째로 큰 요소 예시: 입력: nums = [3,2,1,5,6,4], k = 2 출력: 5 입력: nums = [3,2,3,1,2,4,5,5,6], k = 4 출력: 4 풀이 및 해설 (Python): 퀵 정렬의 변형인 퀵 선택(Quick Select) 알고리즘을 사용하여, 전체 배열을 정렬하지 않고도 k번째로 .. 2024. 3. 28.
[코딩 인터뷰] 두 배열의 교집합 구하기 문제 설명: 두 개의 정수 배열 nums1과 nums2가 주어졌을 때, 이 두 배열의 교집합을 계산하는 함수를 작성하세요. 결과 배열에는 두 배열 모두에 나타나는 모든 고유한 정수가 포함되어야 합니다. 결과 배열의 순서는 상관 없습니다. 제한 사항: 결과 배열은 고유한 값만 포함해야 합니다. 즉, 중복된 원소를 제거해야 합니다. 입력으로 주어지는 두 배열의 길이는 최소 1 이상입니다. 입력: nums1: 첫 번째 정수 배열 nums2: 두 번째 정수 배열 출력: 두 배열의 교집합을 나타내는 정수 배열 예시: 입력: nums1 = [1, 2, 2, 1], nums2 = [2, 2] 출력: [2] 입력: nums1 = [4, 9, 5], nums2 = [9, 4, 9, 8, 4] 출력: [9, 4] 출력된 .. 2024. 3. 28.
[코딩 인터뷰] 단어 단위로 문자열 뒤집기 주어진 문자열 s는 여러 단어로 구성되어 있으며, 각 단어는 하나 이상의 공백 문자로 구분됩니다. 당신의 목표는 각 단어 내에서 문자의 순서를 뒤집되, 단어의 순서는 유지하는 새로운 문자열을 반환하는 함수를 작성하는 것입니다. 여기서 단어란 공백이 아닌 문자들의 연속된 시퀀스를 의미합니다. 입력: s: 단어와 공백 문자로 구성된 문자열 (1 ≤ 문자열의 길이 ≤ 10,000) 출력: 각 단어 내의 문자 순서가 뒤집힌 새로운 문자열 예시: 입력: "hello world" 출력: "olleh dlrow" 입력: "The quick brown fox jumps over the lazy dog" 출력: "ehT kciuq nworb xof spmuj revo eht yzal god" 더보기 Python def .. 2024. 3. 28.
[Easy] 삽입 위치 구하기 문제: 정렬된 정수형 배열과 삽입하려는 정수 값이 인수로 입력되면 해당 값이 삽입 될 배열의 인덱스를 리턴하는 함수를 구현하라.단, 배열 내에 중복이 존재할 수 없다. 따라서 이미 배열에 값이 존재한다면 해당하는 값의 인덱스를 리턴한다. 예제 1:Input : [1,3,5,6], 5 Output : 2 예제 2:Input : [1,3,4,5], 2Output : 1 예제 3:Input : [1,3,5,6], 7Output: 4 풀이:바이너리 탐색 알고리즘을 활용하여 값을 찾아간다.바이너리 탐색 알고리즘은 중간 값을 구해서 중간 값이 타겟이 되는 값보다 크다면 왼쪽 편을 탐색하고 작다면 오른 쪽을 탐색하는 알고리즘이다.배열에서 중간이 되는 인덱스를 구하는 것은 작은 쪽 인덱스와 큰 쪽 인덱스를 합쳐서 2로.. 2017. 12. 14.
[Easy] 정렬된 배열에서 중복 삭제하기 문제: 정렬된 정수형 배열을 입력받아 중복이 존재하는 숫자를 삭제하는 함수를 작성하라. 반환 값은 새로 구성되는 배열의 길이이다. 또한 추가 메모리를 사용하지 않고 중복을 제거해야 한다. 예제입력 값 : [1, 1, 2] 리턴되는 값은 2이어야 하고 이 배열의 첫 번째 항목과 두 번째 항목은 1과 2로 되어야 한다. 새로 구성되는 배열의 길이 이후의 값은 어떤 값이 와도 상관없다. 풀이: 이미 정렬된 배열에서 중복 값을 찾는 것은 어렵지 않다. 배열의 길이가 2 이상인 경우 i를 1부터 시작해서 array[i] 과 array[i-1]을 비교해서 서로 같으면 중복되는 값이다. 이러한 것을 이용해서 우리는 배열을 수정해야 한다. 중복되는 숫자일 경우 다로 다음 인덱스로 넘어가고 만약 다른 숫자라면 변경될 배.. 2017. 12. 13.
[Easy] 정렬된 두 링크드 리스트 합치기 문제: 정렬된 두 링크드 리스트를 합쳐서 하나의 정렬된 링크드 리스트로 반환해라. 예제:입력: 1->3->4, 1->5->6출력: 1->1->3->4->5->6 링크드 리스트 클래스 구조는 다음과 같다. public class ListNode { int val; ListNode next; ListNode(int x) { val = x; } }구현되어야 할 함수의 선언은 다음과 같다.ListNode mergeTwoLists(ListNode l1, ListNode l2); 풀이:재귀함수를 이용하면 간단히 풀 수 있는 문제이다.첫 번째 노드의 값을 비교해서 더 큰 값이 작은 값의 next가 되면 된다.그리고 작은 값의 next와 큰 값과 다시 비교해서 merge하는 과정을 계속 반복하여 null이 나올 때 까.. 2017. 12. 13.
[Easy] 유효한 괄호 문자열 찾기 문제: 주어진 문자열이 유효한 괄호인지 검사하는 함수를 작성하라. 괄호의 종류는 다음 세 가지가 있다. "( )", "{ }", "[ ]" 각 괄호의 우선순위는 존재하지 않지만 다른 괄호가 열려있는 중간에 닫는 괄호가 온다면 유효하지 않는 문자열이 된다. 예를 들어 "( [ ] )" 이 문자열은 유효한 것이다. 하지만 "( [ ) ]" 이 것은 유효하지 않은 문자열이다. 풀이:이번 문제는 스택을 이용하면 간단히 해결 가능한 문제이다. 괄호 문자 중 여는 괄호가 나오면 스택에 push를 하고 닫힌 괄호가 나올 때 스택에서 pop을 해서 두 쌍이 유효한 것 인지 비교한다. 두 쌍이 제대로 이뤄져 있다면 true두 쌍이 서로 다른 괄호의 종류이거나 스택에 더이상 괄호가 없는데 pop을 시도한 경우는 false.. 2017. 12. 13.
[Easy] 공통 접두사 찾기 문제: 주어진 문자열 배열에서 가장 긴 공통 접두사를 찾아라. 예)입력 값 : {"abc", "abcd", "ab"}결과 : "ab" 풀이:각 배열에 들어있는 문자열을 첫 글자부터 하나씩 비교해 나간다. 만약 다른 글자를 포함한 것이 있거나 더이상 글자가 없다면 중단해서 그 이전 까지의 문자열이 common prefix이다. Java code: class Solution { public String longestCommonPrefix(String[] strs) { if(strs.length == 0) return ""; StringBuilder result = new StringBuilder(); boolean same = true; for(int i = 0; i < strs[0].length(); i+.. 2017. 12. 13.
반응형