팀스파르타 코딩

📝 [TIL] 2025-06-05 (목) - 다시 코딩테스트

creator2041 2025. 6. 5. 21:02

✅ 문제 1. 마지막 두 수를 비교하여 새 값 추가

● 최초 시도

처음에는 조건에 맞는 값을 계산하기보다, arr[i] == queries[1] 형태로 값을 직접 비교해서 교체하는 식으로 작성했고, 배열을 새로 만들 때도 new_list라는 존재하지 않는 변수명을 사용했다.

int[] answer = new_list[num_list.Length + 1]; // ❌ "new_list" 라는 변수 정의 없음

● 감정 단계

int second = num_list[num_list.Length - 2];
int last = num_list[num_list.Length - 1];

int[] answer = new int[num_list.Length + 1];
for (int i = 0; i < num_list.Length; i++)
{
    answer[i] = num_list[i];
}
answer[num_list.Length] = (last > second) ? last - second : last * 2;

● 반추 또는 오류 패턴

  • 존재하지 않는 변수 사용 (new_list)
  • 값 비교 및 배열 추가 방식이 잘못됨

✅ 문제 2. 문자열 입력으로 수 조작

● 최초 시도

초기에는 control[i] == "w"와 같이 문자열로 비교해 오류가 발생했다. 문자열이 아니라 문자형(char)으로 비교해야 한다는 C#의 문법 차이를 인지하지 못함.

if (control[i] == "w") // ❌ "char" vs "string" 비교

● 감정 단계

if (control[i] == 'w') n += 1;
else if (control[i] == 's') n -= 1;
else if (control[i] == 'd') n += 10;
else n -= 10;

● 반추 또는 오류 패턴

  • 문자열과 문자형의 혼용으로 인한 컴파일 오류

✅ 문제 3. numLog 값으로 명령 발사 복원

● 최초 시도

초기 코드에서는 i = 0부터 시작했기 때문에 i-1에 접근하는 순간 IndexOutOfRangeException이 발생했다. 이전 값을 참조하려면 i = 1부터 순회해야 한다는 기본 개념을 놓침.

for (int i = 0; i < numLog.Length; i++)
{
    if (numLog[i] == numLog[i - 1] + 1) // ❌ i == 0일 때 i-1 추적으로 발생

● 감정 단계

for (int i = 1; i < numLog.Length; i++)
{
    if (numLog[i] == numLog[i - 1] + 1) answer += "w";
    else if (numLog[i] == numLog[i - 1] - 1) answer += "s";
    else if (numLog[i] == numLog[i - 1] + 10) answer += "d";
    else answer += "a";
}

● 반추 또는 오류 패턴

  • 인덱스 오류: i-1 사용 시 반드시 i=1부터 시작할 것

✅ 문제 4. arr에서 쿼리 [i, j] 값으로 swap

● 최초 시도

초기에는 queries를 queries[1], queries[2]처럼 1차원 배열처럼 접근했다. 그러나 C#의 2차원 배열에서는 [i, 0], [i, 1] 형식으로 접근해야 하는 걸 놓쳐 오류가 발생했다.

if (arr[i] == queries[1]) // ❌ 2차원 배열 접근 못함

● 감정 단계

for (int i = 0; i < queries.GetLength(0); i++)
{
    int a = queries[i, 0];
    int b = queries[i, 1];

    int temp = arr[a];
    arr[a] = arr[b];
    arr[b] = temp;
}

● 반추 또는 오류 패턴

  • 2차원 배열 접근 방식 착오로 인해 런타임 오류 발생

✅ 문제 5. [s, e, k] 문제: 공간 내 최소 값 탐색

● 최초 시도

초기에는 min 값을 설정하지 않고 조건 만족 여부에 따라 직접 answer에 값을 넣으려고 했으나, 만족하지 못하는 경우 -1 처리를 하지 못하고 실패. 또한 가장 작은 값을 비교할 기준이 없어 항상 잘못된 값이 저장됨.

● 감정 단계

int min = int.MaxValue;
bool found = false;

for (int i = s; i <= e; i++)
{
    if (arr[i] > k && arr[i] < min)
    {
        min = arr[i];
        found = true;
    }
}
answer[q] = found ? min : -1;

● 반추 또는 오류 패턴

  • int.MaxValue로 비교 기준값을 명확히 설정하지 않아서 매번 엉뚱한 값이 최솟값으로 저장됨
  • found 플래그 없이 무조건 min을 answer에 할당해버리는 오류

후기

  • 오늘 풀었던 문제 대부분이 "단순한 배열 처리"를 넘어서서, 인덱스를 명확히 이해하고 활용하는 능력이 중요했다.
  • 특히 "쿼리" 문제는 "무엇을 바꿔라"는 명령이므로, 값 비교가 아니라 위치 비교라는 점을 계속해서 상기해야 했다.
  • 중간중간 문법 실수(문자/문자열, 배열 인덱스 등)가 있었지만, 그때마다 수정 과정을 겪으며 구조적 이해가 더 깊어졌다.