본문 바로가기
728x90
반응형

전체 글274

addTwoHugeNumbers 두 개의 큰 정수가 링크드 리스트로 주어졌습니다. 각 링크드 리스트 요소는 0부터 9999까지의 숫자로, 정확히 4자리 숫자를 나타냅니다. 나타낸 숫자에는 선행 0이 있을 수 있습니다. 이 두 큰 정수를 더하고 결과를 동일한 형식으로 반환하는 것이 문제입니다. 예시: a = [9876, 5432, 1999]이고 b = [1, 8001]인 경우, 결과는 [9876, 5434, 0]이 됩니다. 설명: 987654321999 + 18001 = 987654340000. a = [123, 4, 5]이고 b = [100, 100, 100]인 경우, 결과는 [223, 104, 105]가 됩니다. 설명: 12300040005 + 10001000100 = 22301040105. // Singly-linked lists .. 2024. 3. 11.
isListPalindrome 주어진 정수로 구성된 단일 연결 리스트가 회문인지 확인하는 두 가지 일반적인 접근 방식이 있습니다. 스택 사용: 연결 리스트를 순회하고 값을 스택에 넣습니다. 그런 다음 리스트를 다시 순회하고 스택에서 꺼낸 값을 현재 노드와 비교합니다. 모든 노드가 일치하면 연결 리스트는 회문입니다. 그렇지 않으면 회문이 아닙니다. 이 접근 방식은 O(n) 시간 복잡도를 가지며 스택에 추가 공간을 사용합니다. 두 번째 절반 뒤집기: 연결 리스트의 중간 지점을 찾습니다. 두 번째 절반을 뒤집습니다. 첫 번째 절반과 뒤집힌 두 번째 절반을 비교합니다. 일치하면 연결 리스트는 회문입니다. 그렇지 않으면 회문이 아닙니다. 이 접근 방식도 O(n) 시간 복잡도를 가지지만 추가 공간은 **O(1)**만 사용합니다. 문제에서 시간 .. 2024. 3. 9.
removeKFromList 주어진 연결 리스트에서 값이 k인 노드를 모두 제거하는 문제입니다. 이 문제를 해결하기 위해서는 연결 리스트를 순회하면서 값이 k인 노드를 발견하면 해당 노드를 제거해야 합니다. // Singly-linked lists are already defined with this interface: // class ListNode { // public T value { get; set; } // public ListNode next { get; set; } // } // ListNode solution(ListNode l, int k) { if(l == null){ return null; } ListNode current = l; while(current != null && current.value == k){.. 2024. 3. 8.
isCryptSolution 암호화된 문자열을 해독하여 올바른 숫자로 변환하여 검증하는 것입니다. 세 개의 문자열로 이루어진 crypt 배열과 두 개의 문자열로 이루어진 solution 배열이 주어집니다. 각 문자는 0부터 9까지의 숫자를 나타냅니다. crypt 배열의 각 문자열을 해독하여 올바른 숫자로 변환한 후, 덧셈 연산을 수행하여 crypt 배열의 마지막 문자열이 solution 배열의 합과 동일한지 확인해야 합니다. 또한 다음 규칙을 따라서 암호화를 수행합니다. 각 문자열의 첫 번째 문자는 0으로 시작하지 않습니다. 따라서 "00123"과 같은 문자열은 유효하지 않습니다. 각 문자는 0부터 9까지의 숫자 중 하나를 나타냅니다. 각 문자열의 길이는 1 이상 15 이하입니다. bool solution(string[] crypt.. 2024. 3. 7.
sudoku2 주어진 그리드가 유효한 스도쿠 퍼즐인지 확인하는 알고리즘을 구현해야 합니다. 스도쿠 퍼즐은 9 × 9 그리드에 1부터 9까지의 숫자를 중복되지 않게 채워넣는 것이 목표입니다. 각 행, 각 열, 그리고 3 × 3 크기의 서브 그리드(총 9개)에는 1부터 9까지의 숫자가 한 번씩만 나타나야 합니다. bool solution(char[][] grid) { HashSet rows = new HashSet(); HashSet cols = new HashSet(); HashSet subs = new HashSet(); for(int i = 0;i 2024. 3. 6.
rotateImage 주어진 2D 행렬을 90도 시계 방향으로 회전시키는 문제 추가적인 메모리를 O(1)만 사용하여 풀어야 합니다. 여기서는 주어진 행렬을 원래의 행렬에 덮어씌우면서 회전을 진행하는 방법을 사용할 수 있습니다. 이를 위해서는 주어진 행렬을 다음과 같이 네 단계로 나눠서 회전시킬 수 있습니다: 주어진 행렬을 대각선을 기준으로 대칭시킵니다. 행렬의 각 행을 뒤집습니다. int[][] solution(int[][] a) { int n = a.Length; for(int i = 0;i 2024. 2. 28.
firstNotRepeatingCharacter 주어진 문자열에서 첫 번째로 등장하는 반복되지 않는 문자를 찾는 것입니다. 즉, 문자열에서 한 번만 등장하는 문자를 찾아야 합니다. 만약 이러한 문자가 없다면 '_'를 반환해야 합니다. 예를 들어, 문자열 "abacabad"에서는 'c'와 'd'가 두 번 등장하지 않으므로 두 문자 중 첫 번째로 등장하는 'c'를 반환해야 합니다. 문제의 구체적인 설명은 다음과 같습니다: 주어진 문자열 s는 소문자 영어 알파벳으로만 구성됩니다. 문자열의 길이는 1에서 10^5 사이입니다. 첫 번째로 등장하는 반복되지 않는 문자를 찾아 반환합니다. 만약 이러한 문자가 없다면 '_'를 반환합니다. char solution(string s) { Dictionary dic = new Dictionary(); foreach(cha.. 2024. 2. 27.
Count Sum of Two Representations 2 주어진 정수 n을 두 정수 A와 B의 합으로 나타낼 때, A와 B가 주어진 범위 [l, r]에 속하는 경우의 수를 찾는 것입니다. 주어진 범위 [l, r] 내에서 A와 B를 선택하여 n을 만드는 경우의 수를 구하는 방법은 다음과 같습니다: A를 l부터 r까지 선택합니다. 선택한 A에 대해 B를 선택합니다. B는 A보다 같거나 크면서, n - A보다 작거나 같은 범위여야 합니다. 즉, B는 max(A, n - A)부터 r까지 선택 가능합니다. 선택한 A와 B에 대해 n = A + B를 만족하는 경우의 수를 세어줍니다. def solution(n, l, r): count = 0 for A in range(l,r+1): if n - A >= A and n- A 2024. 2. 26.
728x90
반응형