[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
Amazon VPC Architecture 이해하기
새로운 프로젝트를 기획하며, 개발에서 무엇을 가장 먼저 고민해야 하는지 다시 돌아보게 되었습니다.한때는 프론트엔드가 모든 설계의 출발점이라고 믿었습니다. 유저가 무엇을 보고, 어떤 흐름에서 머무르고 이탈하는지에 대한 이해 없이 서비스를 만든다는 건 불가능하다고 생각했기
'원사이트'프론트엔드 관점으로 알고리즘 이해하기
오랜만에 방법론에 관한 글을 쓰게 되었습니다. 최근 상황은 이렇습니다. SSAFY에서는 하루에 엄청난 양의 알고리즘 문제들을 과제로 수행하게 됩니다. 그 과정에서, '구현력'이 매우 떨어진다는 생각이 들었습니다. 완전히 어려운 문제라면 '아쉬움'이라는 감정조차 느끼지
SubnetVPC 설계의 시작: IP와 Subnet
반복되는 루틴 속에서 얻은 안정감을 발판 삼아, 이제는 기술적 스펙트럼을 넓히기 위한 개인 프로젝트에 착수하고자 합니다.이번 프로젝트의 목표는 단순한 포트폴리오 구축을 넘어, 실제 서비스 수준의 블로그 시스템 구현과 다국어 처리 적용 등 실무에 가까운 역량을 한 단계