Search

코딩테스트 준비문제 (설계)

배열 섞기 (Shuffle an Array)

문제 설명

정수 배열 nums가 주어질 때, 해당 배열을 무작위로 섞는 알고리즘을 설계하세요.
모든 배열의 순열(permutation)은 동일한 확률로 반환되어야 합니다.

Solution 클래스를 다음과 같이 구현하세요:

Solution(int[] nums)
→ 객체를 배열 nums로 초기화합니다.
int[] reset()
→ 배열을 초기 상태로 되돌리고 반환합니다.
int[] shuffle()
→ 배열을 무작위로 섞은 결과를 반환합니다.

예시

입력:

["Solution", "shuffle", "reset", "shuffle"] [[[1, 2, 3]], [], [], []]
Plain Text
복사

출력:

[null, [3, 1, 2], [1, 2, 3], [1, 3, 2]]
Plain Text
복사

설명:

Solution solution = new Solution([1, 2, 3]); solution.shuffle(); // 예: [3, 1, 2] 반환. [1,2,3]의 어떤 순열도 동일한 확률로 나올 수 있음 solution.reset(); // [1, 2, 3] 반환 (초기 상태로 복원) solution.shuffle(); // 예: [1, 3, 2] 반환 (무작위 순열)
C++
복사

제약 조건

1 <= nums.length <= 50
10⁶ <= nums[i] <= 10⁶
배열의 모든 원소는 서로 다름
reset()shuffle()은 총 최대 10,000번 호출될 수 있음
class Solution { vector<int> original; int n; public: Solution(vector<int>& nums) { } vector<int> reset() { } vector<int> shuffle() { //make a copy of the original vector<int> shuffled = original; return shuffled; } };
C++
복사

Min Stack (최솟값을 추적하는 스택)

문제 설명

다음 연산들을 **상수 시간(O(1))**에 지원하는 스택을 설계하세요:
push(int val): 스택에 원소 val을 추가합니다.
pop(): 스택의 맨 위 원소를 제거합니다.
top(): 스택의 맨 위 원소를 반환합니다.
getMin(): 스택 내 최소값을 반환합니다.

클래스 정의

다음과 같이 MinStack 클래스를 구현하세요:
MinStack() // 스택 객체 초기화 push(int val) // val을 스택에 삽입 pop() // 맨 위 원소 제거 top() -> int // 맨 위 원소 반환 getMin() -> int // 현재 스택의 최소값 반환
C++
복사
모든 연산은 O(1) 시간 복잡도로 수행되어야 합니다.

예시

입력:

["MinStack","push","push","push","getMin","pop","top","getMin"] [[],[-2],[0],[-3],[],[],[],[]]
Plain Text
복사

출력:

[null,null,null,null,-3,null,0,-2]
Plain Text
복사

설명:

MinStack minStack = new MinStack(); minStack.push(-2); // [-2] minStack.push(0); // [-2, 0] minStack.push(-3); // [-2, 0, -3] minStack.getMin(); // => -3 minStack.pop(); // [-2, 0] minStack.top(); // => 0 minStack.getMin(); // => -2
C++
복사

제약 조건

2³¹ <= val <= 2³¹ - 1
pop, top, getMin는 항상 비어 있지 않은 스택에서 호출됩니다.
최대 30,000번까지 push, pop, top, getMin 함수가 호출될 수 있습니다.