반응형
제한 시간 내 문제 풀기 2
이번 글에서는 제한 시간 내에 문제를 해결하는 연습을 계속합니다. 다양한 유형의 문제를 통해 실전 감각을 익혀보세요. 아래 예제 문제들을 제한 시간 내에 풀어보세요.
문제 1: 세 수의 합 (Three Sum)
주어진 배열에서 세 수의 합이 0이 되는 모든 고유한 조합을 찾으세요.
예제
- 입력:
[-1, 0, 1, 2, -1, -4]
- 출력:
[[-1, 0, 1], [-1, -1, 2]]
JavaScript
function threeSum(nums) {
nums.sort((a, b) => a - b);
const result = [];
for (let i = 0; i < nums.length - 2; i++) {
if (i > 0 && nums[i] === nums[i - 1]) continue;
let left = 0, right = nums.length - 1;
while (left < right) {
const sum = nums[i] + nums[left] + nums[right];
if (sum === 0) {
result.push([nums[i], nums[left], nums[right]]);
while (left < right && nums[left] === nums[left + 1]) left++;
while (left < right && nums[right] === nums[right - 1]) right--;
left++;
right--;
} else if (sum < 0) {
left++;
} else {
right--;
}
}
}
return result;
}
console.log(threeSum([-1, 0, 1, 2, -1, -4])); // [[-1, -1, 2], [-1, 0, 1]]
Python
def three_sum(nums):
nums.sort()
result = []
for i in range(len(nums) - 2):
if i > 0 and nums[i] == nums[i - 1]:
continue
left, right = i + 1, len(nums) - 1
while left < right:
s = nums[i] + nums[left] + nums[right]
if s == 0:
result.append([nums[i], nums[left], nums[right]])
while left < right and nums[left] == nums[left + 1]:
left += 1
while left < right and nums[right] == nums[right - 1]:
right -= 1
left += 1
right -= 1
elif s < 0:
left += 1
else:
right -= 1
return result
print(three_sum([-1, 0, 1, 2, -1, -4])) # [[-1, -1, 2], [-1, 0, 1]]
문제 2: 주식의 최대 이익 II
주어진 배열에서 주식을 여러 번 사고팔아 얻을 수 있는 최대 이익을 계산하세요. 각 원소는 날마다의 주식 가격입니다.
예제
- 입력:
[7, 1, 5, 3, 6, 4]
- 출력:
7
(1일에 사고 3일에 팔기, 다시 3일에 사고 5일에 팔기)
JavaScript
function maxProfit(prices) {
let maxProfit = 0;
for (let i = 1; i < prices.length; i++) {
if (prices[i] > prices[i - 1]) {
maxProfit += prices[i] - prices[i - 1];
}
}
return maxProfit;
}
console.log(maxProfit([7, 1, 5, 3, 6, 4])); // 7
console.log(maxProfit([1, 2, 3, 4, 5])); // 4
Python
def max_profit(prices):
max_profit = 0
for i in range(1, len(prices)):
if prices[i] > prices[i - 1]:
max_profit += prices[i] - prices[i - 1]
return max_profit
print(max_profit([7, 1, 5, 3, 6, 4])) # 7
print(max_profit([1, 2, 3, 4, 5])) # 4
문제 3: 문자열의 조합
주어진 문자열에서 모든 가능한 부분 문자열을 찾으세요.
예제
- 입력:
"abc"
- 출력:
["a", "ab", "abc", "b", "bc", "c"]
JavaScript
function getSubstrings(s) {
const substrings = [];
for (let i = 0; i < s.length; i++) {
for (let j = i + 1; j <= s.length; j++) {
substrings.push(s.substring(i, j));
}
}
return substrings;
}
console.log(getSubstrings("abc")); // ["a", "ab", "abc", "b", "bc", "c"]
Python
def get_substrings(s):
substrings = []
for i in range(len(s)):
for j in range(i + 1, len(s) + 1):
substrings.append(s[i:j])
return substrings
print(get_substrings("abc")) # ["a", "ab", "abc", "b", "bc", "c"]
문제 4: 배열의 중복된 원소 제거
주어진 배열에서 중복된 원소를 제거하고, 남은 원소들을 반환하세요.
예제
- 입력:
[1, 1, 2, 3, 4, 4, 5]
- 출력:
[1, 2, 3, 4, 5]
JavaScript
function removeDuplicates(arr) {
return [...new Set(arr)];
}
console.log(removeDuplicates([1, 1, 2, 3, 4, 4, 5])); // [1, 2, 3, 4, 5]
Python
def remove_duplicates(arr):
return list(set(arr))
print(remove_duplicates([1, 1, 2, 3, 4, 4, 5])) # [1, 2, 3, 4, 5]
결론
이번 글에서는 제한 시간 내에 문제를 해결하는 연습을 계속했습니다. 다양한 유형의 문제를 통해 실전 감각을 익히고, 시간 관리 능력을 향상시킬 수 있습니다. 다음 글에서는 모의 면접과 코드 리뷰에 대해 더 자세히 알아보겠습니다.
다음 글에서 만나요!
반응형
'코딩테스트1' 카테고리의 다른 글
[코딩 테스트] 30일차: 실전 모의고사 - 최종 준비 (3) | 2024.09.30 |
---|---|
[코딩 테스트] 29일차: 실전 모의고사 - 모의 면접과 코드 리뷰 2 (0) | 2024.09.29 |
[코딩 테스트] 27일차: 실전 모의고사 - 종합 리뷰와 최종 준비 팁 (4) | 2024.09.27 |
[코딩 테스트] 26일차: 실전 모의고사 후 피드백 받기 (1) | 2024.09.26 |
[코딩 테스트] 25일차: 실전 모의고사 - 모의 면접과 코드 리뷰 (0) | 2024.09.25 |