[TIL/정처기] 2025/03/17
24년 2회 기출 코드 정리 ✍️24-2-1-JAVA ⚙️문자열 분할(String split) 메서드와 배열 인덱싱에 관한 코드. 특히 문자열을 특정 구분자로 나눴을 때 어떤 배열이 생성되는지, 그리고 해당 배열의 특정 인덱스에 어떤 값이 저장되는지 이해하고 있는지 확
24년 2회 기출 코드 정리 ✍️
24-2-1-JAVA ⚙️
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 ⚙️
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);
}
}
**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)}')
문자열 포맷팅 과정에서 실수할 수 있는 코드. 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); }
위 코드의 핵심은 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; }
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; } }
자바 인터페이스와 구현 클래스를 활용한 홀짝 필터링 합계 계산 코드. 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)); } }

재귀(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); }
우선 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); }
More to read
프론트엔드와 백엔드 사이
HTTP 상태 코드는 프론트엔드에서 백엔드로 보냈던 요청의 수행 결과를 의미하는 일종의 약속이며, API를 구성하는 핵심 요소 중 하나입니다. 상태 코드와 관련하여, 백엔드는 잘 모르는 프론트엔드의 슬픈 사정이 있습니다.아래는 요청이 실패했음에도, 백엔드에서 상태 코드
JWT토큰 관리 방식 톺아보기
0. 들어가며 🎯 서비스에 접근하려는 사용자가 누구인지 확인하는 과정을 사용자 인증이라고 합니다. 인증된 사용자에게 주어진 권한을 확인하는 작업은 인가라고 부릅니다. 이번 글에서는 인가는 다루지 않습니다. 사용자 인증에는 많은 방식이 있지만, 오늘은 세션 인증 방
A2AA2A / MCP 멀티 에이전트 오케스트레이션
0. 들어가며 ✍️ Google for Developers에, 레스토랑 공급망 시나리오로 엮은 6대 프로토콜(MCP, A2A, UCP, AP2, A2UI, AG-UI)에 대한 가이드가 게시된 이후, MCP와 A2A부터 구현해 보는 것이 좋을 것 같다는 생각이 들었습니