TIL

[TIL/정처기] 2025/03/17

24년 2회 기출 코드 정리 ✍️24-2-1-JAVA ⚙️문자열 분할(String split) 메서드와 배열 인덱싱에 관한 코드. 특히 문자열을 특정 구분자로 나눴을 때 어떤 배열이 생성되는지, 그리고 해당 배열의 특정 인덱스에 어떤 값이 저장되는지 이해하고 있는지 확

2025년 3월 17일8min read

24년 2회 기출 코드 정리 ✍️

24-2-1-JAVA ⚙️

code
public class Test {
    public static void main(String[] args){
        String str = "ITISTESTSTRING";
        String[] result = str.split("T");
        System.out.print(result[3]);
    }
}

문자열 분할(String split) 메서드와 배열 인덱싱에 관한 코드. 특히 문자열을 특정 구분자로 나눴을 때 어떤 배열이 생성되는지, 그리고 해당 배열의 특정 인덱스에 어떤 값이 저장되는지 이해하고 있는지 확인하는 코드라고 볼 수 있다. 출력 결과는 S.

24-2-2-JAVA ⚙️

code
public class Test {
    public static void check(int[] x, int[] y){
       if(x == y) System.out.print("O");
       else System.out.print("N");
    }
    public static void main(String[] args) {
        int a[] = new int[] {1,2,3,4};
        int b[] = new int[] {1,2,3,4};
        int c[] = new int[] {1,2,3};
        check(a,b);
        check(b,c);
        check(a,c);
    }
}
==``` 연산자는 배열 객체의 참조(메모리 주소)가 동일한지 비교하며, 내용이 같더라도 다른 객체라면 false를 반환한다. 출력 결과는 NNN.

**24-2-3-Python ⚙️**

def cnt(str,p): result = 0 for i in range(len(str)): sub = str[i:i+len(p)] if sub == p: result += 1 return result

str = "abdcabcabca" p1 = "ca" p2 = "ab" print(f'ab{cnt(str, p1)} ca{cnt(str, p2)}')

code
문자열 포맷팅 과정에서 실수할 수 있는 코드. f-string에서의 'ab'와 'ca'는 단순 문자열이고, 각각의 문자열 뒤에 어떤 값이 붙어야 하는지가 핵심이다. cnt(str, p1)은 cnt(str,"ca")와 같고, 결과는 3이다. cnt(str, p2)도 마찬가지고, 최종 출력 결과는 ab3 ca3이 된다. 

**24-2-5-C ⚙️**

#include

void swap(int a, int b){ int t = a; a = b; b = t; }

int main(){ int a = 11; int b = 19; swap(a,b); switch (a) { case 1: b += 1; case 11: b += 2; default: b += 3; break; } printf("%d", a-b); }

code
위 코드의 핵심은 swap()을 했지만 main 함수에서 값이 변경되지 않았다는 점이다. Call by Value와 Call by Reference의 차이인데, 참조를 전달한 것이 아니라 값을 swap() 함수로 전달했기에 기존값과는 완전히 다른 새로운 복사본이 생긴 것이다. 따라서 main에서는 여전히 a=11, b=19다. 따라서 b는 최종적으로 24가 되고, 출력 결과는 11-24인 -13이다. 원본 값을 변경하려면 포인터를 사용하여 Call by Reference 방식으로 전달해야 한다. Call by Value와 Call by Reference의 차이를 인지하고 있는지 묻는 코드라고 볼 수 있다.

**24-2-6-C ⚙️**

#include

void func(char d, char s){ while(s){ d = s; d++; s++; } d = '\0'; }

int main(){ char str1 = "first"; char str2[50] = "teststring"; int result = 0; func(str2, str1); for(int i = 0; str2[i] != '\0'; i++){ result += i; }; printf("%d\n", result); return 0; }

code
C 언어 포인터를 이용한 문자열 복사와 인덱스 연산에 관한 코드. 함수 func는 문자열 복사를 구현하며, 원본 포인터를 증가시키며 대상 문자열로 복사한다. 문자열 "first"가 str2에 복사된 후, 문자열 길이가 5이므로 인덱스 합계(0+1+2+3+4=10)가 출력된다.

**24-2-7-JAVA ⚙️**

interface Number { int sum(int[] a, boolean odd); }

public class Test { public static void main(String[] args){ int a[] = {1,2,3,4,5,6,7,8,9}; OENumber OE = new OENumber(); System.out.print(OE.sum(a, true) + ", " + OE.sum(a, false)); } }

class OENumber implements Number { public int sum(int[] a, boolean odd){ int result = 0; for(int i = 0; i < a.length; i++){ if((odd && a[i] % 2 != 0) || (!odd && a[i] % 2 == 0)){ result += a[i]; } } return result; } }

code

자바 인터페이스와 구현 클래스를 활용한 홀짝 필터링 합계 계산 코드. Number 인터페이스를 구현한 OENumber 클래스는 배열에서 홀수(odd=true) 또는 짝수(odd=false)만 선택적으로 합산하는 기능을 제공한다. 출력 결과는 "25, 20" (홀수 합 1+3+5+7+9=25, 짝수 합 2+4+6+8=20).

**24-2-8-JAVA ⚙️**

public class Test { public static String rf(String str, int index, boolean[] seen){ if(index < 0) return ""; char c = str.charAt(index); String result = rf(str, index-1, seen); if(!seen[c]){ seen[c] = true; return c + result; } return result; } public static void main(String[] args) { String str = "abacabcd"; int len = str.length(); boolean[] seen = new boolean[256]; System.out.print(rf(str, len-1, seen)); } }

code

![](https://velog.velcdn.com/images/minkwan/post/c60cc987-08e7-4923-9e06-273239e4af52/image.png)

재귀(Recursion)와 백트래킹(Backtracking) 그리고 중복 제거(Duplicate removal)가 구현된 코드를 읽을 수 있는지가 핵심이다. 이런 문제는 시험 마지막에 차근차근 푸는 것이 좋겠다.


**24-2-9-C ⚙️**

#include

int main(){ int arr[3][3] = {1,2,3,4,5,6,7,8,9}; int parr[2] = {arr[1], arr[2]}; printf("%d", parr[1][1] + (parr[1]+2) + parr); }

code

우선 3 X 3 배열이 생성된다. 1행(arr[0])은 1,2,3 / 2행(arr[1])은 4,5,6 / 3행(arr[2])은 7,8,9다.

그 다음 parr이라는 이름의 2행 배열이 구성된다. parr[0]은 2행(4,5,6), parr[1]은 3행(7,8,9)이다.

출력하는 parr[1][1]은 3행의 두 번째 요소, 즉 8이다. *(parr[1]+2)은 3행에서 두 칸 이동한 값인 9이다. 마지막으로 **parr은 parr[0]의 첫 번째 값, 즉 4이다. 따라서 출력 결과는 (8+9+4)인 21이다.

C 언어의 2차원 배열과 포인터 배열의 관계를 보여주는 코드다. 배열 접근 방식과 다양한 포인터 연산의 동작을 이해하고 있는지 묻고 있다고 볼 수 있다.

**24-2-19-C ⚙️**

#include

struct node { int data; struct node Next; };

int main(){ struct node head = NULL; struct node a = {10, 0}; struct node b = {20, 0}; struct node c = {30, 0};

head = &a; a.Next = &b; b.Next = &c; printf("%d", head -> Next -> data); }