Company
교육 철학

코딩테스트 실전 문제 (기타) (Coding Test: Misc)

두 정수의 합 (Sum of Two Integers)

두 정수 a, b가 주어질 때, +- 연산자를 사용하지 않고 두 정수의 합을 반환하세요.
예시 1:
입력: a = 1, b = 2 출력: 3
Plain Text
복사
예시 2:
입력: a = 2, b = 3 출력: 5
Plain Text
복사
제약 조건:
-1000 <= a, b <= 1000

역폴란드 표기법 계산 (Evaluate Reverse Polish Notation)

문자열 배열 tokens가 주어지며, 이는 역폴란드 표기법(RPN)으로 표현된 산술식을 나타냅니다.
이 식을 계산하여, 그 값을 나타내는 정수를 반환하세요.
주의 사항:
유효한 연산자는 '+', '-', '*', '/' 입니다.
피연산자는 정수이거나 또 다른(부분) 표현식일 수 있습니다.
두 정수의 나눗셈은 항상 0을 향해 버림(truncate toward zero) 합니다.
0으로 나누는 경우는 없습니다.
입력은 유효한 RPN 산술식입니다.
정답 및 중간 계산 결과는 모두 32비트 정수로 표현 가능합니다.
예시 1:
입력: tokens = ["2","1","+","3","*"] 출력: 9 설명: ((2 + 1) * 3) = 9
Plain Text
복사
예시 2:
입력: tokens = ["4","13","5","/","+"] 출력: 6 설명: (4 + (13 / 5)) = 6
Plain Text
복사
예시 3:
입력: tokens = ["10","6","9","3","+","-11","*","/","*","17","+","5","+"] 출력: 22 설명: ((10 * (6 / ((9 + 3) * -11))) + 17) + 5 = ((10 * (6 / (12 * -11))) + 17) + 5 = ((10 * (6 / -132)) + 17) + 5 = ((10 * 0) + 17) + 5 = (0 + 17) + 5 = 17 + 5 = 22
Plain Text
복사
제약 조건:
1 <= tokens.length <= 10^4
tokens[i]는 연산자 "+", "-", "*", "/" 중 하나이거나, [-200, 200] 범위의 정수입니다.

과반수 원소 (Majority Element)

크기 n인 배열 nums가 주어질 때, 과반수 원소(majority element) 를 반환하세요.
과반수 원소란 배열에서 ⌊n / 2⌋번을 초과하여 등장하는 원소를 말합니다. 과반수 원소는 항상 존재한다고 가정해도 됩니다.
예시 1:
입력: nums = [3,2,3] 출력: 3
Plain Text
복사
예시 2:
입력: nums = [2,2,1,1,1,2,2] 출력: 2
Plain Text
복사
제약 조건:
n == nums.length
1 <= n <= 5 * 10^4
-10^9 <= nums[i] <= 10^9
입력은 과반수 원소가 존재하도록 생성됩니다.
추가 질문(Follow-up):
선형 시간(O(n))과 O(1) 추가 공간으로 풀 수 있나요?

연예인 찾기 (Find the Celebrity)

문제 설명

n명(0부터 n-1까지 라벨링)이 있는 파티가 있다고 합시다. 그들 중 연예인(celebrity) 이 1명 존재할 수도 있습니다. 연예인의 정의는 다음과 같습니다:
다른 n - 1명은 모두 그 연예인을 알고 있지만,
연예인은 다른 누구도 알지 않습니다.
당신의 목표는 연예인이 누구인지 찾아내거나(또는) 연예인이 없음을 검증하는 것입니다.
단, 당신이 할 수 있는 것은 다음과 같은 질문을 통해서만 정보를 얻는 것입니다: “A야, B를 아니?”
즉, AB를 아는지 여부를 알려주는 보조 함수 bool knows(a, b)만 사용할 수 있습니다.
함수 int findCelebrity(n)를 구현하세요.
파티에 연예인이 존재한다면 그 라벨을 반환합니다.
연예인이 없다면 -1을 반환합니다.
연예인이 존재한다면 정확히 1명만 존재합니다.

입출력 예시

예시 1:
입력: graph = [[1,1,0],[0,1,0],[1,1,1]]
출력: 1
설명: 0, 1, 2 세 사람이 있으며, graph[i][j] = 1이면 i가 j를 안다는 뜻이고, 0이면 모른다는 뜻입니다. 0과 2는 1을 알고 있지만, 1은 누구도 알지 않으므로 연예인은 1입니다.
예시 2:
입력: graph = [[1,0,1],[1,1,0],[0,1,1]]
출력: -1
설명: 연예인이 없습니다.

제약사항

n == graph.length n == graph[i].length 2 <= n <= 100 graph[i][j] is 0 or 1 graph[i][i] == 1
Plain Text
복사

작업 스케줄러 (Task Scheduler)

대문자 A~Z로 라벨링된 CPU 작업 배열 tasks와 정수 n이 주어집니다. 각 CPU 인터벌(interval)마다, CPU는 쉬고(idle) 있을 수도 있고 작업 1개를 완료할 수도 있습니다.
작업은 어떤 순서로 처리해도 되지만 제약이 있습니다:
같은 라벨의 작업 두 개 사이에는 최소 n개의 인터벌 간격이 있어야 합니다.
모든 작업을 완료하는 데 필요한 CPU 인터벌의 최소 개수를 반환하세요.
예시 1:
입력: tasks = ["A","A","A","B","B","B"], n = 2
출력: 8
설명: 가능한 처리 순서: A -> B -> idle -> A -> B -> idle -> A -> B
작업 A를 한 뒤에는 A를 다시 하기까지 2 인터벌을 기다려야 하고, B도 마찬가지입니다. 3번째 인터벌에서는 A/B 모두 할 수 없어 idle이 됩니다.
예시 2:
입력: tasks = ["A","C","A","B","D","B"], n = 1
출력: 6
설명: 가능한 처리 순서: A -> B -> C -> D -> A -> B
쿨다운이 1이면, 다른 작업 1개만 사이에 두고 같은 작업을 다시 실행할 수 있습니다.
예시 3:
입력: tasks = ["A","A","A","B","B","B"], n = 3
출력: 10
설명: 가능한 처리 순서: A -> B -> idle -> idle -> A -> B -> idle -> idle -> A -> B
A와 B 두 종류의 작업만 있고 3 인터벌을 띄워야 하므로, 사이에 idle이 2번씩 들어가게 됩니다.
제약 조건:
1 <= tasks.length <= 10^4
tasks[i]는 대문자 영문자입니다.
0 <= n <= 100