TIL

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

22년 3회 기출 코드 정리 ✍️22-3-1-C ⚙️중첩 포문을 4개를 걸었고, 특별히 C언어의 본질을 묻는 것도 아닌 roTMfprl 코드. 풀 가치가 없음. 코드로서의 가치도 없음. 이런 문제 때문에 떨어진다면, 정처기 그냥 안 따고 말겠음.22-3-4-JAVA ⚙

2025년 3월 25일5min read

22년 3회 기출 코드 정리 ✍️

22-3-1-C ⚙️

중첩 포문을 4개를 걸었고, 특별히 C언어의 본질을 묻는 것도 아닌 roTMfprl 코드.

풀 가치가 없음. 코드로서의 가치도 없음. 이런 문제 때문에 떨어진다면, 정처기 그냥 안 따고 말겠음.

22-3-4-JAVA ⚙️

code
public class Test {
    public static void main(String[] args) {
        int result [] = new int[5];
        int arr [] = {77, 32, 10, 99, 50};
        for(int i = 0; i < 5; i++){
            result[i] = 1;
            for(int j = 0; j < 5; j++)
                if(arr[i] < arr[j])
                    result[i]++;
        }
         for(int k = 0; k < 5; k++)
            System.out.print(result[k]);
    }
}

최종 출력 결과는 24513.

중첩 for 문 코드에 접근하기 가장 좋은 방법 중 하나는, 중첩된 상황을 자연어, 즉 의사 코드로 표현해 보는 것이다. i가 0일 때 j 전체, 1일 때 j 전체. 즉 배열을 순회하며 i 번째 요소가 j 번째 요소보다 작으면 result의 값을 증가시키는 코드다. 구조를 먼저 파악하고 접근하자는 것. 쉬운 코드였다.

22-3-9-Python ⚙️

code
a = [1, 2, 3, 4, 5]
a = list(map(lambda num : num + 100, a))
print(a)

map 함수와 lambda 함수를 사용해 리스트 a의 모든 요소에 100을 더하는 변환을 수행한 후, 그 결과를 다시 리스트로 변환하여 a에 재할당한다. 최종적으로, 변환된 리스트 [101, 102, 103, 104, 105]가 출력된다.

22-3-13-C ⚙️

code
#include <stdio.h>

main() {
    int s, el = 0;
    for(int i = 6; i <= 30; i++){
        s = 0;
        for(int j = 1; j <= i / 2; j++)
            if(i % j == 0)
                s = s + j;
        if(s == i)
            el ++;     
    }
    printf("%d", el);
}

완전수를 묻는 코드고, 이전에도 다룬 바 있다. 기출에서 반복적으로 묻고 있는 개념이니, 완전수에는 6과 28이 있다는 정도는 외워두는 것이 좋겠다.

22-3-19-JAVA ⚙️

code
public class Test {
    static int[] mkarr() {
        int[] tmpArr = new int[4];
        for(int i = 0; i < tmpArr.length; i++)
            tmpArr[i] = i;
        return tmpArr;
    }
    public static void main(String[] args) {
        int[] arr;
        arr = mkarr();
        for(int i = 0; i < arr.length; i++)
            System.out.print(arr[i]);
    }
}

설명은 생략하고, 개인적으로 시험 2주 전에 요약본을 만들 예정인데, 이 코드는 넣지 않으려고 한다. 너무 쉽다. 출력 결과는 0123.

22-3-20-JAVA ⚙️

code
public class Test {
    public static void main(String[] args) {
        int r = 0;
        for(int i = 1; i < 999; i++){
            if(i % 3 == 0 && i % 2 == 0)
                r = i;
        }
        System.out.print(r);
    }
}

3으로 나누어지면서 동시에 2로 나누어지는 수. 즉 6의 배수를 r에 대입하는 코드다. 999보다 작은 수 중 가장 큰 6의 배수가 r에 할당될 것이다. 6166은 996이다. 따라서 최종 출력 결과는 996.

이론 문제 포인트 ✍️

1. 삽입문(INSERT INTO~) ✅

- 기본 테이블에 새로운 튜플을 삽입하는 명령문

code
INSERT INTO 테이블명([속성명1, 속성명2, ...])
VALUES(데이터1, 데이터2, ...)

예) <사원> 테이블에 (이름-홍승현, 부서-인터넷)을 삽입하시오

code
INSERT INTO 사원(이름, 부서) VALUES('홍승현', '인터넷');

예) <사원> 테이블에 (장보고, 기획, 05/03/73, 홍제동, 90)을 삽입하시오

code
INSERT INTO 사원 VALUES('장보고', '기획', #05/03/73#, '홍제동', 90);

2. 삭제문(DELETE FROM~) ✅

- 기본 테이블에 있는 튜플들 중에서 특정 튜플을 삭제하는 명령문

code
DELETE FROM 테이블명 [WHERE 조건];

예) <사원> 테이블에서 "임꺽정"에 대한 튜플을 삭제하시오

code
DELETE FROM 사원 WHERE 이름 = '임꺽정';

예) <사원> 테이블에서 "인터넷" 부서에 대한 모든 튜플을 삭제하시오

code
DELETE FROM 사원 WHERE 부서 = '인터넷';

예) <사원> 테이블의 모든 레코드를 삭제하시오

code
DELETE FROM 사원;

3. 갱신문(UPDATE~ SET~) ✅

- 기본 테이블에 있는 튜플들 중에서 특정 튜플의 내용을 변경하는 명령문

code
UPDATE 테이블명
SET 속성명 = 데이터 [속성명 = 데이터, ...]
[WHERE 조건];

예) <사원> 테이블에서 "홍길동"의 주소를 "수색동"으로 수정하시오

code
UPDATE 사원 SET 주소 = '수색동' WHERE 이름 = '홍길동';

예) <사원> 테이블에서 "황진이"의 부서를 "기획부"로 변경하고, 기본급을 5만원 인상시키시오

code
UPDATE 사원 
SET 부서 = '기획', 기본급 = 기본급 + 5
WHERE 이름 = '황진이';

4. SELECT ✅

- SELECT의 기본 형태

code
SELECT [DISTINCT] 열_이름 [, 열_이름 ...]
FROM 테이블_이름
[WHERE 조건]
[GROUP BY 열_이름]
[HAVING 조건]
[ORDER BY 열_이름 [ASC | DESC]];

5. SELECT 기본 검색 ✅

예) <사원> 테이블의 모든 튜플을 검색하시오

code
SELECT * FROM 사원;

예) <사원> 테이블에서 '주소'만 검색하되 같은 '주소'는 한 번만 출력하시오

code
SELECT DISTINCT 주소 FROM 사원;

6. SELECT 조건 지정 검색 ✅

예) <사원> 테이블에서 '기획'부의 모든 튜플을 검색하시오

code
SELECT * FROM 사원 WHERE 부서 = '기획';

예) <사원> 테이블에서 '기획' 부서에 근무하면서 '대흥동'에 사는 사람의 튜플을 검색하시오

code
SELECT * FROM 사원 WHERE 부서 = '기획' AND 주소 = '대흥동';

예) <사원> 테이블에서 성이 '김'인 사람의 튜플을 검색하시오

code
SELECT * FROM 사원 WHERE 이름 LIKE "김%";

예) <사원> 테이블에서 '생일'이 '01/01/69'에서 '12/31/73' 사이인 튜플을 검색하시오

code
SELECT * FROM 사원 WHERE 생일 BETWEEN #01/01/69# AND #12/31/73#;

예) <사원> 테이블에서 '주소'가 NULL인 튜플을 검색하시오

code
SELECT * FROM 사원 WHERE 주소 IS NULL;

7. SELECT 정렬 검색 ✅

예) <사원> 테이블에서 '부서'를 기준으로 오름차순 정렬하고, 같은 '부서'에 대해서는 '이름'을 기준으로 내림차순 정렬시켜서 검색하시오

code
SELECT * FROM 사원 ORDER BY 부서 ASC, 이름 DESC;

8. SELECT 하위 질의 ✅

예) '취미'가 '나이트댄스'인 사원의 '이름'과 '주소'를 검색하시오

code
SELECT 이름, 주소 FROM 사원 WHERE 이름 = (SELECT 이름 FROM 여가활동 WHERE 취미 = '나이트댄스');

예) 취미활동을 하지 않는 사원들을 검색하시오

code
SELECT * FROM 사원 WHERE 이름 NOT IN (SELECT 이름 FROM 여가활동);

예) '망원동'에 거주하는 사원들의 '기본급'보다 적은 '기본급'을 받는 사원의 정보를 검색하시오

code
SELECT 이름, 기본급, 주소 FROM 사원 WHERE 기본급 < ALL(SELECT 기본급 FROM 사원 WHERE 주소 = '망원동');

9. 그룹 지정 검색 ✅

예) <상여금> 테이블에서 '부서'별 '상여금'의 평균을 구하시오

code
SELECT 부서, AVG(상여금) AS 평균 FROM 상여금 GROUP BY 부서;

예) <상여금> 테이블에서 '상여금'이 100 이상인 사원이 2명 이상인 '부서'의 튜플의 수를 구하시오

code
SELECT 부서, COUNT(*) AS 사원수 FROM 상여금 WHERE 상여금 >= 100 GROUP BY 부서 HAVING COUNT(*) >= 2;