2025년 상반기 KT AI 계약학과 모집 공고가 나온 것을 보고, 2024년 하반기에 지원했던 후기를 작성하고자 한다.

내가 준비할 때에도 정보가 매우 부족했어서.. 이 글이 계약학과 준비를 하는데 도움이 될까 하여 적어본다.

 

당연히! 상세한 내용은 적을 수 없고!! 분위기 정도만 적어보려고 한다.

...... 이렇게만 적어볼게요 .....

 

우선 처음 지원할 때 들었던 생각은, 혜택이 엄청나서 한번 도전해보고 싶다..! 였다.

모집 공고에서 볼 수 있듯이 장학금, 논문 지도, 인턴 지원 등 엄청난 복지가 주어진다.

그것도 KT에서..!

 

지원 안 할 이유가 없었던,,, 것이다.

 

 

1. 서류 전형

아마 다들 서류를 쓰고 계실텐데, 총 3개의 질문이 있다.

 

- 지원 동기 및 앞으로의 노력

- 연구, 프로젝트 경험

- 개발 역량, 관련 지식, 스킬 등

 

질문이 딱히 어렵지 않고 무난했다. 지금까지 활동 잘 하고, 공부한 내용이 있다면 부담없이 쉽게 써내려 갈 수 있을 것 같다.

무엇보다 500자씩 1500자여서 이 정도면 서류 작성에 대한 부담은 별로 없을 것이다.

 

 

이 외에도 지원 사이트에 여러 서류를 제출하는 칸이 있을 것이다.

- 컨퍼런스 논문

- 논문 포스터

- 상장

- 활동 증명서 (수료증)

- 포트폴리오

 

이렇게 제출했다. 여기서 강조하고 싶은건 포트폴리오!

아무리 인공지능 분야에 계신 분이라도, 처음 보는 논문이나 활동, 프로젝트에 대해서 곧장 이해하기는 어려우실거다.

 

따라서, 포트폴리오를 만들어서 시각적으로 보여드리면, 앞으로의 면접 질문에서 주도권을 잡을 수 있다.

면접관 분들이 내가 한 프로젝트에 대해서 잘 이해하지 못하셨다면, 그에 대한 질문도 경로를 이탈할 수 있기 때문이다!

 

귀찮겠지만, 정리 용으로 포트폴리오 제작을 추천한다.

 

 

그리고 영어 성적은 토익으로 제출했다.

만약.. 아직 KT에서 요구하는 영어 성적이 없는 분들은 최종 합격 전까지만 영어 성적을 제출해도 되는 것으로 알고 있다.

서류 제출시 영어가 없는 것에 대한 패널티는.. 인사팀이 아니니 알지 못한다..ㅠㅠ

 

영어 성적이 없는 것에 마음이 불안할 수 있으니.. (영어 때문에 떨어졌나..? 이런 생각이 들수도) 빨리 공인영어점수를 획득하는 걸 추천한다!

 

 

1차 합격 했을 때는 뭐.. 그냥 붙었구나.. 했다.

내가 될 것이라고 생각을 거의 안 하고 있었기 때문에...! ㅎ

그래서 그런지 합격자 발표 캡쳐도 안 해두었더라...

 

 

 

2. 코딩테스트 + 인적성

(1) 코딩테스트

알고리즘을 잘 푼다는 생각을 거의 안 하고 살았으며..

논문 작성과 이것저것 공부로 인하여 문제 풀이를 거의 놔버렸던 나는 코테 벼락치기를 했다.

 

거의 하루에 15문제..? 씩 광기 넘치게 풀었다.

코딩테스트는 "프로그래머스"라는 사이트에서 진행되기 때문에, 백준이나 코드트리보다 프로그래머스에서 연습하는 것을 추천한다.

 

코테 문제는 엄청나게 어렵지는 않았다.

프로그래머스의 level 1, 2 정도의 난이도였고, 그걸 어떤 블로그에서 보고 나도 프로그래머스 level 1 위주 + 핵심 문제 level 2 이렇게 연습했던 것 같다.

 

4문제에 두시간이었던 것 같다.

빈 A4 용지 한 장은 지참 가능했고, 시험 보기 전에 감독관께 비어있음을 확인시켜드리면 된다.

 

 

원래부터 갈고 닦으신 분들은 아주 무난하게 통과할 수 있을 것이다... 화이팅!

 

 

 

(2) 인적성

문제의 인적성이다...

나는 한번도 인적성을 공부한 적도, 시험을 본 적도 없다.

그래서 너무 막막했는데.. 뭐 나오는지 공부라도 해보자, 하고 책을 구매할까 했다.

 

근데 밀리의 서재에 KT 인적성 문제집이 있었고,

어차피 인적성을 수기로 보는게 아니라 컴퓨터로 보는 거였기 때문에 환경에 익숙해지기 더 좋을 것 같아서 밀리로 공부했다.

 

(그거 아시나요.. 밀리의 서재 KT에서 인수함.. 정확히는 KT 계열사 지니뮤직에서..! 그래서 있나봐요..

도 KT 장기고객 혜택으로 밀리의 서재 공짜로 구독했어요.........)

 

 

내가 인적성 공부하면서 많이 참고했던 유튜브 링크도 첨부하겠다.

 

- 봉봉 TV

https://youtu.be/YWiG4Hru0J0?si=HdX7YpfOcJHGaznp

 

 

- 해커스 잡 (꿀팁 엄청 많이 주신다.)

https://youtu.be/UoJ0Xz-d4Zg?si=JwdfX8S7QzySNPSK

 

 

- 잡플랫 TV (인성 검사 위주로 봤다.)

https://youtu.be/F_W52ovVtGg?si=6lMMkLAtTGyn-wag

 

 

 

우선 나는 정말 인적성을 못했다. (고 생각한다.)

시간이 너무 없고, 필기라도 하면서 문제 풀면 더 나을텐데.. 인적성에서는 필기구, 종이 싹 다 안된다.

 

머릿속으로.. 그리고 오른쪽에 조그맣게 있는 메모장 + 그림 패드를 마우스로 그려가면서 풀어야 한다.

 

오전에 코테를 보고, 잠시 점심시간 가졌다가 오후에 인적성을 보는데,

이게 체력 소모가 장난 아니다.. 계속 긴장하고 있다 보니까..

 

깨운한 머리로도 잘 풀 수 없는게 인적성인데.. 몽롱하면 더 안 풀리겠지요..

그니까 점심 먹고 인적성 보기 전에 낮잠 자는걸 추천한다!

 

 

인적성 잘 못 봤다고 생각했는데, 다들 못 본건지 아니면 코테로 커트한건지 알 수 없지만..!

합격을 했고, 1차 면접 공지를 받았다.

 

 

우선 서류전형, 코테 + 인적성까지만 적어봤다.. 도움이 될까 모르겠다..

이런 전형을 밟아보는 것 자체가 많은 도움이 된다고 생각하여 많이 지원했으면 좋겠다.

떨어져도 다 경험이니까~!

 

 

참고로 학과설명회는 꼭!! 들으세요!

좋은 정보가 정말 많습니다ㅎㅎ

 


 

궁금한 점이 있다면 다같이 공유할 수 있게  '공개 댓글' 로 부탁드립니다.

비밀 댓글에는 답변을 드리지 않겠습니다ㅠㅠ

 

다음 글에서 1차 면접과 2차 면접 후기로 찾아뵐게요..!

 

1. 기본 용어 정리

데이터를 가지고 학습할 때, 우리의 목표는 다음과 같다.

f는 1차 연속 미분 가능 (일차 도함수가 연속)

f(x)를 최소로 하는 solution을 찾는 것이다.

 

문제에 따라서 f(x)를 최대화 해야 하는 경우도 있고, 최소화 해야 하는 경우도 있다.

전자는 error나 cost, 후자는 probability가 있겠다.

 

무엇을 최적화하는지에 따라 관점이 달라지는 것이다!

 

 

위의 식은 unconstrained optimization이라면, convex optimization에서 정의하는 식은 다음과 같이 constrained optimization이다.

 

- f(x) : objective function

- g(x) : Inequality constraints

- h(x) : Equality contraints

- subject to는 줄임말로 s.t. 으로 많이 적는다.

 

 

이런 제약 조건을 만족하는 x를 feasible solutions (실현 가능한 솔루션)이라고 한다.

x들을 모아놓은 집합은 feasible set이라고 한다.

 

feasible set 중에서 min f(x)를 만드는 x를 optimal solution이라고 한다. (아래 그림에서 x*)

https://www.sciencedirect.com/topics/economics-econometrics-and-finance/convex-optimization

 

$$solution = argmin_xf(x)$$

 

 

 

- local minimum : 어떤 값 주변에서 함수를 가장 작게 만드는 점에서의 값 (극솟값)

(주의 : 미분이 0일 필요 없음.)

- global minimum : 극솟값 중 가장 작은 값

 

- local maximum : 어떤 값 주변에서 함수를 가장 크게 만드는 점에서의 값 (극댓값)

(주의 : 미분이 0일 필요 없음.)

- global maximum : 극댓값 중 가장 큰 값

 

즉, 극소와 극대는 미분이 0인 지점의 값을 의미하는 것이 아니다.

극솟값, 극댓값에서 우연히 미분 값이 0이 될 수는 있지만, 미분이 0이라고 해서 모두 극소, 극대인 것은 아니라는 뜻이다.

 

아래의 예시에서 처럼, 주변보다만 크거나 작으면 된다.

 

 

 

 

2. Convex Optimization Problem

f(x)가 convex이고, feasible set이 convex이면, Convex Optimization Problem이다.

 

Convex는 '볼록한'이라는 뜻을 가지고 있다.

 

 

(1) f(x)가 convex

function에 대한 convex의 정의는, 단어 뜻 그대로 '볼록한' 모양을 가지면 된다.

 

이를 수식으로 표현하면,

정의역에 포함되는 모든 $x_1, x_2$에 대해, $\alpha \in [0, 1]$

$$f(\alpha{x_1} + (1-\alpha)x_2) \leq f(x_1) + (1-\alpha)f(x_2)$$

 

부등호 기준 왼쪽은 x1과 x2 사이의 x값에 대한 함수값을 의미한다.

만약 $\alpha$가 $\frac{1}{2}$이라면, x1과 x2의 중간값의 함수값인 것을 쉽게 알 수 있다.

 

부등호 기준 오른쪽은 f(x1)과 f(x2) 사이의 함수값을 의미한다.

y축 기준으로 값을 봤을 때, $\alpha$가 $\frac{1}{2}$이라면 f(x1)과 f(x2)의 중간값인 것을 알 수 있다.

 

 

따라서, x1과 x2에서의 두 점을 이은 직선이 함수값보다 크다면, convex하다고 말할 수 있다.

Jensen's inequality라고도 부른다.

 

 

 

(2) feasible set이 convex

정의역 ($S$)에 포함되는 모든 $x_1, x_2$에 대해, $\alpha \in [0, 1]$에 대해

$$\alpha{x_1} + (1-\alpha)x_2 \in S$$

 

정의역 내의 두 벡터가 나타내는 선분 위의 점을 다 나타낼 수 있음을 의미한다.

 

 

아래의 그림에서 왼쪽은 convex set이지만, 오른쪽은 non-convex set이다.

https://en.wikipedia.org/wiki/Convex_set

 

 

 

정리해보면,

모든 x에 대해서 $f''(x)\geq 0$을 만족한다면 f는 convex function이다.

 

x가 스칼라가 아니라, 벡터 (f가 다변수 함수)일 때도 동일하다.

'값'에 대해서 최소를 구하고 싶은 것이기 때문에, 함수에 벡터가 입력되어도 출력은 스칼라여야 한다.

헤시안 행렬을 구하면 위와 같다.

 

 

헤시안 행렬이 모든 벡터 z에 대해 Positive-semi definite라면 f는 Convex function이다.

모든 벡터 z에 대해 Positive-semi definite 인지를 확인하기 위해서 위와 같은 작업을 해주면 된다!

위의 예시에서는 0보다 항상 크거나 같기 때문에 f가 convex하다고 말할 수 있다.

 

 


 

1. convex optimization problem은 local minimum이 global minimum이다.

 

2. convex optimization problem은 f(x)가 convex하고, feasible set이 convex하면 된다.

 

 

1. 문제 설명

어피치는 카카오톡으로 전송되는 메시지를 압축하여 전송 효율을 높이는 업무를 맡게 되었다. 메시지를 압축하더라도 전달되는 정보가 바뀌지 않도록 하기 위해서, LZE(Lempel-Ziv-Welch) 압축을 구현하기로 했다.

 

LZW 압축은 다음 과정을 거친다.

- 길이가 1인 모든 단어를 포함하도록 사전을 초기화한다.

- 사전에서 현재 입력과 일치하는 가장 긴 문자열 w를 찾는다.

- w에 해당하는 사전의 색인 번호를 출력하고, 입력에서 w를 제거한다.

- 입력에서 처리되지 않은 다음 글자가 남아있다면 (c), w+c에 해당하는 단어를 사전에 등록한다.

- 두번째 단계로 돌아간다.

 

 

압축 알고리즘은 영문 대문자만 처리한다고 할 때, 사전은 다음과 같이 초기화된다.

 

예를 들어 입력으로 'KAKAO'가 들어온다고 하자.

 

이 과정을 거쳐 다섯 글자의 문자 KAKAO가 4개의 색인 번호 [11, 1, 27, 15]로 압축된다.

 

문자열 msg에 대해 압축한 결과를 배열로 출력하라.

 

 

 

2. 코드

import string

def find_max_str(msg, index):
    max_str = ''

    for i in msg:
        if max_str + i in index.keys():
            max_str += i
        else:
            return max_str

    return max_str
    
        
def solution(msg):
    keys = [ i for i in string.ascii_uppercase ]
    values = [ i for i in range(1, 27) ]
    index = { k:v for k, v in zip(keys, values) }
    
    answer = []

    while True:
        max_str = find_max_str(msg, index)
        answer.append(index[max_str])

        msg = msg[len(max_str):]

        if len(msg) == 0:
            break
        index[max_str + msg[0]] = len(index.keys()) + 1
        
    
    return answer

 

 

 

3. 설명

- 우선 사전 초기화를 해주는데, dictionary를 만들 때 문제에서 제시한거랑 다르게 key를 알파벳으로, value는 1부터 26까지로 초기화했다. 이유는 해당 문자(또는 문자열)이 dictionary에 존재하는지 확인하기가 편하기 때문이다.

 

- find_max_str()으로 사전에 존재하는 최대 문자열을 확인하여, max_str를 반환한다.

msg에 있는 알파벳 하나씩을 더해가면서 dictionary에 있는지 확인하여, 존재하지 않을 때까지의 문자열을 반환한다.

 

- max_str의 길이를 통해 이후에 조사할 msg를 만들어준다. (msg = msg[len(max_str):])

- 마지막에 max_str + msg[0] 문자열을 dictionary에 추가해준다.

+ Recent posts