본문 바로가기
코딩테스트

[코딩테스트] 8주차: 실전 모의 코딩 테스트

by cogito21_python 2024. 6. 4.
반응형

실전 모의 코딩 테스트

학습 주제

  • 실제 코딩 테스트와 유사한 환경에서 연습
  • 시간 관리와 문제 해결 전략 수립

학습 목표

  • 실전 코딩 테스트 환경에 익숙해지고, 시간 내에 문제를 해결할 수 있는 능력을 기른다.
  • 다양한 문제 해결 전략을 익히고, 이를 통해 효율적으로 문제를 해결할 수 있다.

학습 자료

  • 온라인 저지 플랫폼 (예: LeetCode, HackerRank, Codeforces)에서 제공하는 실전 문제

실습 문제

각 문제를 실제 코딩 테스트 환경에서 제한 시간 내에 풀어보세요. 문제는 LeetCode, HackerRank, Codeforces 등의 플랫폼에서 선택하여 진행할 수 있습니다.

 

1. Two Sum (LeetCode)

  • 주어진 배열에서 두 숫자의 합이 목표 값이 되는 인덱스 쌍을 찾으세요.
  • 문제 링크
def two_sum(nums, target):
    num_map = {}
    for i, num in enumerate(nums):
        complement = target - num
        if complement in num_map:
            return [num_map[complement], i]
        num_map[num] = i
    return []

# Test
nums = [2, 7, 11, 15]
target = 9
print(two_sum(nums, target))  # [0, 1]

 

2. Longest Substring Without Repeating Characters (LeetCode)

  • 중복되지 않는 가장 긴 문자열의 길이를 구하세요.
  • 문제 링크
def length_of_longest_substring(s):
    char_map = {}
    left = 0
    max_length = 0
    for right, char in enumerate(s):
        if char in char_map and char_map[char] >= left:
            left = char_map[char] + 1
        char_map[char] = right
        max_length = max(max_length, right - left + 1)
    return max_length

# Test
s = "abcabcbb"
print(length_of_longest_substring(s))  # 3

 

3. Maximum Subarray (LeetCode)

  • 주어진 배열에서 가장 큰 합을 갖는 연속된 부분 배열의 합을 구하세요.
  • 문제 링크
def max_sub_array(nums):
    max_current = max_global = nums[0]
    for num in nums[1:]:
        max_current = max(num, max_current + num)
        if max_current > max_global:
            max_global = max_current
    return max_global

# Test
nums = [-2, 1, -3, 4, -1, 2, 1, -5, 4]
print(max_sub_array(nums))  # 6

 

4. Merge Intervals (LeetCode)

  • 주어진 구간들을 병합하여 중첩된 구간을 제거하세요.
  • 문제 링크
def merge_intervals(intervals):
    if not intervals:
        return []
    intervals.sort(key=lambda x: x[0])
    merged = [intervals[0]]
    for current in intervals:
        last = merged[-1]
        if current[0] <= last[1]:
            last[1] = max(last[1], current[1])
        else:
            merged.append(current)
    return merged

# Test
intervals = [[1, 3], [2, 6], [8, 10], [15, 18]]
print(merge_intervals(intervals))  # [[1, 6], [8, 10], [15, 18]]

 

5. Kth Largest Element in an Array (LeetCode)

  • 주어진 배열에서 k번째로 큰 요소를 찾으세요.
  • 문제 링크
import heapq

def find_kth_largest(nums, k):
    return heapq.nlargest(k, nums)[-1]

# Test
nums = [3, 2, 1, 5, 6, 4]
k = 2
print(find_kth_largest(nums, k))  # 5

추가 학습 자료

실제 모의 코딩 테스트 진행

  1. 환경 설정
    • 자신이 자주 사용하는 코딩 환경을 준비하세요 (IDE, 에디터 등).
    • 타이머를 설정하여 각 문제마다 제한 시간을 정하세요 (예: 30분).
  2. 문제 선택
    • LeetCode, HackerRank, Codeforces 등의 플랫폼에서 다양한 난이도의 문제를 선택하세요.
    • 각 문제를 실제 코딩 테스트처럼 풀어보세요.
  3. 실전 감각 익히기
    • 시간 내에 문제를 해결하는 연습을 합니다.
    • 다양한 문제 유형을 경험하여 실전에서 당황하지 않도록 대비합니다.
  4. 리뷰와 피드백
    • 문제를 풀고 난 후, 자신의 풀이를 리뷰합니다.
    • 더 나은 방법이나 최적화할 수 있는 부분을 찾아보세요.
    • 동료나 멘토와 코드 리뷰를 통해 피드백을 받습니다.

추천 문제

백준 (Baekjoon)

  1. 문제명: 1로 만들기
    • 설명: 정수 X에 사용할 수 있는 연산은 3가지입니다. 1을 뺀다, X가 3으로 나누어 떨어지면 3으로 나눈다, X가 2로 나누어 떨어지면 2로 나눈다. 이 세 연산을 사용하여 1을 만들 때, 최소 연산 횟수를 구하세요.
    • 문제 유형: 동적 프로그래밍
    • 난이도: 실버 III
    • 주소: 1로 만들기
  2. 문제명: 숨바꼭질
    • 설명: 수빈이는 점 N에 있고 동생은 점 K에 있다. 수빈이는 걸어서 이동하거나 순간이동 할 수 있다. 수빈이가 동생을 찾는 가장 빠른 시간을 구하는 문제입니다.
    • 문제 유형: 그래프 탐색 (BFS)
    • 난이도: 실버 I
    • 주소: 숨바꼭질
  3. 문제명: 알고스팟
    • 설명: 알고스팟 운영진이 만든 미로를 탈출하는 문제로, 벽을 최소한으로 부수고 출구로 가야 합니다.
    • 문제 유형: 그래프 탐색 (BFS), 다익스트라
    • 난이도: 골드 IV
    • 주소: 알고스팟

프로그래머스 (Programmers)

  1. 문제명: 여행경로
    • 설명: 주어진 항공권을 모두 사용하여 방문할 수 있는 여행 경로를 찾는 문제입니다.
    • 문제 유형: 그래프 탐색 (DFS, 백트래킹)
    • 난이도: 레벨 3
    • 주소: 여행경로
  2. 문제명: 등굣길
    • 설명: 학교에 가는 길에 물이 잠긴 지역이 있을 때, 가장 효율적인 등굣길의 경로의 수를 구하는 문제입니다.
    • 문제 유형: 동적 프로그래밍
    • 난이도: 레벨 3
    • 주소: 등굣길
  3. 문제명: 가장 먼 노드
    • 설명: 주어진 그래프에서 특정 노드로부터 가장 먼 노드를 찾는 문제입니다.
    • 문제 유형: 그래프 탐색 (BFS)
    • 난이도: 레벨 3
    • 주소: 가장 먼 노드
반응형