[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
AI&ML 기초
Reference: https://bettermesol.github.io/ml/2019/09/16/ai-ml-dl/AI: 기계가 사람처럼 생각하고 판단하게 만드는 가장 넓은 범주의 기술입니다.ML: 데이터를 학습하여 스스로 규칙을 찾아내는 AI의 한 분야로,
'AI Agent Economy'Novitas : AI Agent가 지갑을 가지는 세상
얼마 전, 미래에셋증권 리서치 리포트(올해는 이더리움이다: 에이전트 시대의 Near Automata)를 접하게 되었습니다. AI Agent를 인간과 함께할 경제 주체로 바라보는 시각에 적잖이 충격을 받았더랬죠.한 가지 짚고 넘어갈 부분이 있습니다. 우리가 흔히 'AI'
'ERC-8004'Novitas: AI 에이전트 경제 주체
Web 4.0을 한 문장으로 정의하면 Sovereign Transact입니다.AI가 인간의 허락 없이 지갑을 소유하고, 결제를 수행하며, 인프라를 통제하는 주권적 경제 주체가 되는 세계입니다. Web 3.0이 블록체인 기반의 탈중앙화를 실현했다면, Web 4.0은 그