코딩테스트 16

[Hackerrank] Balanced Brackets

문제: 균형 잡힌 괄호 (Balanced Brackets)괄호는 다음과 같은 문자 중 하나로 정의됩니다: {, }, (, ), [, ].열린 괄호가 닫힌 괄호와 쌍을 이루는 경우를 짝이 맞는 괄호라고 정의합니다. 예를 들어, {}, [], ()는 모두 짝이 맞는 괄호입니다.괄호 쌍이 균형을 이루지 못한 경우는 괄호 안에 포함된 괄호가 짝이 맞지 않는 경우를 말합니다. 예를 들어, {{[}}는 균형을 이루지 못한 예입니다. 이 경우, 다음과 같은 이유로 균형이 맞지 않습니다:중괄호({}) 쌍 안에 포함된 대괄호([])가 짝이 맞지 않습니다.대괄호는 한 쌍을 이루지 못한 열린 괄호 [로 끝납니다.이러한 규칙에 따라, 괄호가 균형을 이루는 경우는 다음 조건을 만족해야 합니다:모든 괄호가 짝이 맞아야 합니다.짝..

코딩테스트 2025.01.30

[Hackerrank] Super Reduced String

문제 설명문자열의 소문자 문자들로 이루어진 문자열 sss가 주어집니다. 다음과 같은 작업을 반복하여 문자열을 줄이는 과정을 수행하세요:한 번의 작업에서, 서로 인접한 두 문자가 같으면 그 둘을 삭제합니다.가능한 한 많은 문자를 삭제한 후, 결과 문자열을 반환하세요. 만약 최종 문자열이 비어있다면 "Empty String"을 반환합니다.예제예제 입력 1입력:s = "aab"설명:첫 번째 작업에서 인접한 문자 'a' 두 개를 삭제하면 문자열은 "b"가 됩니다.결과: "b"출력:"b"예제 입력 2입력:s = "abba"설명:첫 번째 작업에서 인접한 문자 'b' 두 개를 삭제하면 문자열은 "aa"가 됩니다.두 번째 작업에서 인접한 문자 'a' 두 개를 삭제하면 문자열은 비어버립니다.결과: "Empty Strin..

코딩테스트 2025.01.28

[Hackerrank] Sherlock and Anagrams

문제: 애너그램 찾기문제 설명두 문자열이 애너그램(anagram)이라는 것은, 한 문자열의 문자를 재배열하여 다른 문자열로 만들 수 있음을 의미합니다. 주어진 문자열에서, 애너그램 관계를 이루는 모든 부분 문자열 쌍의 개수를 구하세요.예시문자열 s = "mom"이 주어졌을 때, 애너그램을 이루는 부분 문자열 쌍은 다음과 같습니다:[m, m]: 인덱스 [0], [2][mo, om]: 인덱스 [0, 1], [1, 2]결과적으로, 애너그램을 이루는 쌍의 총 개수는 3입니다.함수 설명함수 sherlockAndAnagrams를 완성하세요. 이 함수는 다음의 매개변수를 입력받습니다:s(문자열): 애너그램을 찾을 문자열.출력값애너그램 관계를 이루는 모든 부분 문자열 쌍의 개수를 정수로 반환하세요.입력 형식문자열 s는..

코딩테스트 2025.01.27

[Hackerrank] Queue using Two Stacks

문제 설명큐(Queue)는 데이터가 추가된 순서를 유지하며, 데이터의 가장 오래된 항목이 가장 먼저 제거되는 추상 데이터 타입입니다. 이는 선입선출(FIFO) 데이터 구조로 불리며, 먼저 큐에 추가된 데이터가 가장 먼저 제거됩니다.큐의 기본적인 연산은 다음과 같습니다:Enqueue: 큐의 끝에 새 요소를 추가합니다.Dequeue: 큐의 앞쪽 요소를 제거하고 반환합니다.이 문제에서는 두 개의 스택을 사용하여 큐를 구현해야 합니다. 이후 주어진 q개의 쿼리를 처리합니다. 각 쿼리는 다음 3가지 유형 중 하나입니다:1 x: 정수 x를 큐의 끝에 추가합니다.2: 큐의 앞쪽 요소를 제거합니다.3: 큐의 앞쪽 요소를 출력합니다.입력 형식첫 번째 줄에는 정수 q(쿼리의 개수)가 주어집니다.다음 q개의 줄 각각에는 위..

코딩테스트 2025.01.26

[Hackerrank] Inserting a Node Into a Sorted Doubly Linked List

문제: 정렬된 이중 연결 리스트에 노드 삽입하기정렬된 이중 연결 리스트(Doubly Linked List)가 주어졌을 때, 새로운 데이터를 삽입하여 리스트가 여전히 정렬된 상태를 유지하도록 하세요.입력이중 연결 리스트의 head 노드와 새로 삽입할 정수 데이터 data가 주어집니다.출력새로운 데이터가 삽입된 후의 정렬된 이중 연결 리스트의 head를 반환합니다.제약 조건주어진 이중 연결 리스트는 이미 오름차순으로 정렬되어 있습니다.새로운 데이터도 오름차순의 순서를 유지하도록 삽입해야 합니다.이중 연결 리스트의 정의노드는 다음과 같이 정의됩니다: class DoublyLinkedListNode: def __init__(self, data): self.data = data self.next = None se..

코딩테스트 2025.01.25

[Hackerrank] Ice Cream Parlor

아이스크림 가게 문제두 명의 친구가 함께 돈을 모아 아이스크림 가게에 갔습니다.그들은 항상 두 가지 다른 맛의 아이스크림을 구매하며, 가진 돈을 모두 사용합니다.문제주어진 아이스크림의 가격 리스트에서, 친구들이 가진 돈 m을 정확히 사용하여 구매할 수 있는 두 가지 맛의 아이스크림을 선택하세요.입력 형식첫 번째 줄: 정수 t (테스트 케이스 개수)각 테스트 케이스는 다음과 같이 구성됩니다:정수 m (가진 돈의 총액)정수 n (아이스크림의 종류 수)n개의 정수로 이루어진 리스트: 각 아이스크림 맛의 가격출력 형식각 테스트 케이스에 대해, 선택된 두 아이스크림 맛의 인덱스를 오름차순으로 출력합니다.1부터 시작하는 인덱스를 사용해야 합니다.제약 조건1 ≤ t ≤ 502 ≤ m ≤ 10⁴2 ≤ n ≤ 10⁴1 ..

코딩테스트 2025.01.24

[Hackerrank] Cycle Detection

사이클 감지 (Cycle Detection)문제 설명연결 리스트가 순회 중에 동일한 노드를 두 번 이상 방문하면 해당 연결 리스트는 사이클이 포함되어 있다고 합니다. 연결 리스트의 헤드(head)가 주어졌을 때, 사이클이 포함되어 있는지 확인하세요. 만약 사이클이 있다면 1을 반환하고, 없으면 0을 반환하세요.입력 형식연결 리스트의 헤드(head)가 함수의 매개변수로 주어집니다.연결 리스트의 노드들은 아래와 같은 구조를 가집니다:int data: 노드의 값SinglyLinkedListNode next: 다음 노드를 가리키는 포인터출력 형식연결 리스트에 사이클이 있다면 1을 반환합니다.연결 리스트에 사이클이 없다면 0을 반환합니다.제약 조건연결 리스트의 크기: 0≤list size≤10000 예제입력 1헤..

코딩테스트 2025.01.23

[Hackerrank] Merge two sorted linked lists

문제 설명두 개의 정렬된 단일 연결 리스트 병합두 개의 정렬된 단일 연결 리스트의 헤드 포인터가 주어졌을 때, 이를 하나의 정렬된 단일 연결 리스트로 병합하세요. 어느 한쪽 리스트의 헤드 포인터는 null일 수 있습니다.함수 설명mergeLists 함수를 완성하세요. 함수는 다음과 같은 매개변수를 받습니다:SinglyLinkedListNode pointer headA: 첫 번째 연결 리스트의 헤드 포인터SinglyLinkedListNode pointer headB: 두 번째 연결 리스트의 헤드 포인터반환값:SinglyLinkedListNode pointer: 병합된 리스트의 헤드 포인터입력 형식첫 번째 줄에는 테스트 케이스의 개수 ttt가 주어집니다.각 테스트 케이스는 다음과 같은 형식으로 이루어져 있습..

코딩테스트 2025.01.22

[Hackerrank] Insert a node at a specific position in a linked list

문제 요약: 단일 연결 리스트에서 특정 위치에 노드 삽입하기문제 설명:단일 연결 리스트의 head와 삽입할 데이터(data), 그리고 삽입할 위치(position)가 주어진다. 주어진 위치에 새로운 노드를 삽입한 후, 수정된 연결 리스트를 반환하는 함수를 작성하라.입력 조건:연결 리스트의 길이 n (1 ≤ n ≤ 1000).연결 리스트의 각 노드에 저장된 데이터 (정수).삽입할 데이터 (data).삽입할 위치 (position): 0부터 시작하는 인덱스.출력 조건:삽입된 후 수정된 연결 리스트를 반환.예시:입력: 연결 리스트: 1 → 2 → 3 삽입할 데이터: 4 삽입할 위치: 2출력:1 → 2 → 4 → 3 지난번 문제들과 이어지는 자료구조 문제이다. 이번 문제에서는 단일 연결 리스트에 특정 위치에 새..

코딩테스트 2025.01.21

[Hackerrank] Reverse a doubly linked list

Doubly Linked List 뒤집기 문제 요약 (HackerRank)문제 설명주어진 이중 연결 리스트(Doubly Linked List)의 head 노드 포인터를 기준으로 리스트의 순서를 반대로 뒤집는 문제입니다.즉, 각 노드의 next와 prev 포인터를 서로 교환하여 리스트의 방향을 반전시키고, 뒤집힌 리스트의 head 노드를 반환해야 합니다.입력 형식첫 번째 줄에 테스트 케이스 개수 ttt가 주어집니다. (1 ≤ t ≤ 10)각 테스트 케이스마다:첫 번째 줄에 노드의 개수 n이 주어집니다. (0 ≤ n ≤ 1000)다음 n 줄에 노드의 데이터 값이 주어집니다. (0 ≤ 데이터 ≤ 1000)출력 형식뒤집힌 연결 리스트의 head 노드를 반환합니다.프로그램은 리스트의 데이터를 공백으로 구분하여 출..

코딩테스트 2025.01.20