현재 버전

왜 회사들, 특히 대기업들이 알고리즘 테스트를 시행할까?



저번에 글 쓴거의 반응이 생각보다 좋아서 그냥 좀 더 제 생각들을 이것저것 올려보려고 합니다.


이런 글을 어디다 올릴지 몰라서 일단 사는얘기에 올립니다. 사는 얘기가 아니라 다른데 올릴 만한 곳 있으면 수정하겠습니다.


--

왜 회사들, 특히 대기업들이 알고리즘 테스트를 시행할까?


IT 직종의 대기업들은 대부분이 알고리즘 테스트를 하고 있습니다. 그러다 보니 많은 분들이 알고리즘을 공부 해야함을 알지만 어떤 식으로 공부를 할지, 어떤 알고리즘을 공부해야 할지, 갈피를 못 잡는 경우를

자주 보았습니다.


과연 왜 이 놈의 회사들은 알고리즘 테스트 같은 것들을 보는 것일까요?


[주의] 글 시작에 앞서 포트폴리오 관련 글을 보신 분들은 아시겠지만, 이 글 역시 저의 지나친 개인적인 생각을 기반으로 한 글임을 강조드립니다.


제 기억이 맞다면 알고리즘 테스트를 가장 먼저 도입한 곳은 삼성일 것입니다. 최초는 아니더라도 초기 정도에 시행했다고 생각이 듭니다. 그리고 우리나라의 회사들은 삼성의 트렌드를 따르는 경향이 있습니다. 너도나도 있어보이기 위해 알고리즘 테스트를 시행하기 시작했습니다.


그렇다면 왜, 그 놈의 알고리즘 테스트를 볼까요? 그에 앞서 대기업과 중견, 중소의 차이에 대해 생각해 보겠습니다.


***

## 대기업과 중소기업 무슨 차이가 있을까?

과연 대기업과 중소기업의 차이는 무엇이 있을까요? 연봉? 맞습니다. 대우? 맞습니다. 맞는 말이지만, 이 글에 주제와 관련된 가장 큰 차이는 바로 "신입을 키울 능력이 있는가 vs 실무 능력이 있어 바로 투입이 되는가"

라고 저는 생각합니다.


대기업은 신입을 키울 능력이 있습니다. 개발의 장점이 무엇인가요? 너도, 나도, 우리 모두 할 수 있습니다. 막 코딩을 해서라도, 누더기같은 인형 꿰맨 것 마냥 난리난 코드라도 누구든 짤 수 있습니다.

막말로, CS를 정확히 몰라도, 운영체제가 어떻게 돌아가는지, 시분할 시스템이 무엇인지, 세마포어가 무엇인지, OSI 7 계층이 무엇인지 몰라도, 우리는 개발을 할 수 있습니다.(말 그대로 막말입니다. 몰라도 된다라고는 안 했습니다)


하지만 대기업 입장에서 조금 개발을 해본 사람들?이 몰립니다. 그러나 그런 사람들이 절대 메리트를 가지고 우세하다고 저는 절대 생각하지 않습니다. 중소기업에서 spring으로 개발 1년 해보았다구요? 제가 대기업 임원이면 "그래서요?" 라고 답할 것 같습니다.

대기업 입장에서 사람들은 널렸습니다.


앞서 말한대로 대기업은 신입을 키울 능력이 있습니다. 그렇기 때문에 실무경험이 있다?가 대기업한텐 엄청 큰 메리트는 아닙니다. 그러면 대기업은 무얼 보고 신입을 뽑을까요? 제 생각이 맞다면 "가능성"이라고 생각합니다.


개발은 특별한 것이 아닙니다. 누구나 할 수 있습니다. 무식하게, 또는 지저분하게, 또는 평범하게, 다양한 성향의 사람들, 그 중에서 비범해 보이는 가능성을 가진 사람을 뽑아다 키웁니다. 그러면 그 사람은 더 많은 포텐을 가지고 결과를 내올 가능성이 있거든요


그럼 이 가능성을 어떻게 판단을 할까요? 저는 18년도에 졸업한 시즌이라 그 전의 대기업들이 어떤 채용 절차를 거쳤는지는 모릅니다. 그저 기억하는 것은, 3학년 때 LG 공채에 영어 최저 자격증 제한이 있었는데, 4학년이 되니 그 자격 제한마저 사라졌다는 것입니다.

흔히 이전에는 스펙의 시대였겠구나라고 추론을 할 수 있습니다. 예전의 유명한 단어죠, 고스펙, 인턴십도하고 해외 봉사활동도하고 이런저런 활동을 하는 것으로 그 가능성을 평가 했을거라고 생각합니다.


하지만 고스펙이라고 다 똑부러지고 일을 잘하고 그런게 아니구나라고 느꼈는지 가능성의 척도를 스펙에서, 바로 이것, "문제 해결 능력"으로 갈아 탔다라는 것입니다.


이런 대기업과는 반대로  중소기업은 바로 실무에 투입이 되어야하니 당연히 먼저 개발을 해본 사람, 이것저것해본사람, 자기 회사와 기술스택이 맞는사람이 우선적이 되는 것 입니다.


***

## 문제 해결 능력은 무엇을 말하는가?

저는 알고리즘을 조금 공부해본 경험이 있습니다. ACM 대회도 준비를 해보았었고, 물론 본선도 가진 못하게 되었지만(문제를 3개나 풀었지만 1문제를 팀원 중 풀어줄 사람이 없었습니다. 팀탓입니다.)


제가 알고리즘을 처음 공부 할 때 왜 알고리즘을 공부해야하는지를 느낀 문제를 간단히 보여드리겠습니다.


"아나그램이란. APPLE - LEPPA 와 같이 같은 문자열로 구성된 단어를 아나그램이라고 합니다. 그렇다면 우리가 코드를 통해 두 개의 단어를 입력 받아서 애나그램 관계인지를 출력하고자 할 때,

어떤 방법이 있을까요? "


1. 보통 많은 사람들이 생각 할 방법으로 2중 반복문을 통해 왼쪽 단어 A와 오른쪽단어 전체를 비교, 그 이후 왼쪽단어 P와 오른쪽단어 전체를 비교, 이런 식으로 비교해가며 탐색 할 수 있습니다.

2. 왼쪽 단어를 퀵소트를 통해 AELPP로 정렬하고, 오른쪽 단어역시 정렬하여 AELPP로 정렬한 뒤 1중 반복문으로 각 배열 인덱스를 비교 할 수 있습니다.

3. 초짜였던 저는 저는 이 방법에 감탄했습니다. char 배열을 만들어 A=0, B=1, C=2 이런식으로 인덱스를 생각하고 각 값에 카운트를 넣습니다.


1번 방식은 2중 반복문을 사용하고, 2번 방식은 정렬과 1중 반복문을 통해 효율을 개선하였습니다. 3번은 심지어 정렬하는 기능도 없습니다.


저는 처음엔 당연히 1번 밖에 생각을 못했습니다. 그리고 친구의 3번 해답을 듣고 정말 충격을 먹었습니다. 똑같이 뇌를 가지고 있는데, 효율이 극적으로 차이나는 두개의 대답이 나온 것입니다.


예, 대기업은 이런 똑똑한 친구들을 뽑고 싶은 것입니다. 그냥 코딩이요? 말씀드렸듯 누구나 합니다. 하지만 문제를 어떻게 효율적으로 개선할지, 이것은 정말 천재가 아닌 이상 꾸준히 공부해야합니다.

그래서 삼성에서는 사내에서도 알고리즘 문제풀이로 능력을 매기는 시스템이 있다고 하죠.


제 생각엔 결국 개발자로 문제 해결 능력이라 하면 문제가 주어질때 이 사람이 어떻게 해결 할 것인지입니다. 사고 능력을 판단하기 위한 척도가 지금의 알고리즘 테스트가 되었습니다.


***

## 대기업 입사 알고리즘 테스트, 정말 어려울까요?

NHN은 서류를 100% 합격하고 코딩테스트를 보는걸 알고 계신가요? 삼성도 서류에서 탈락하기 의외로 어려운거 아시나요? 카카오는 서류도 심지어 보지 않는 다고 블라인드 공채를 하고 있습니다.


스펙이 의미가 없다는 말입니다. 삼성은 코딩테스트로 2문제 정도를 출제합니다. 2문제에 3시간, 인터넷에 보면 보통 1문제 맞으면 면접은 간다고 합니다. NHN의 경우 1차 코테로 알고리즘테스트를 보는데 보통 3문제 이상 맞으면 2차까지는 간다고 합니다. 대신 NHN는 CS 관련 2차 테스트가 있습니다.

이런 회사들 스타일에 따라서 몇몇 한 번쯤 이름을 들어본 유명 기업들도 열심히 따라서 서류는 뒷전이고 알고리즘 테스트를 1차, 2차 이런식으로 많이 봅니다.(1차, 2차 다 풀었지만 서류로 떨어뜨린건 안 비밀)


그러면 이런 알고리즘 테스트, 정말로 어려울까요?


저의 대답은 "그렇지 않다." 입니다. 대기업에서 진행하는 알고리즘 테스트는 ACM-ICPC와 같은 알고리즘 경진대회가 아닙니다. 조금 공부한 사람들도 많이 어렵다고 느끼는 네트워크 유량 문제, 이분 매칭 등의 문제는 나온 것을 본 적이 없습니다.

나오더라도 한, 두 문제로 대회 순위권자 정도 되는 사람이 아니라면 못 푸는 문제라고 생각합니다. 그러니 예외로 치겠습니다.


그런 문제를 제외하고는 백준의 시뮬레이션 문제 - 주어진 문제를 그대로 코딩만 할 수 있는지를 판단하는 류의 문제, 정말 기초적인 알고리즘, BFS, DFS, 다이나믹 프로그래밍 정도로 나옵니다. 이 부분은 제가 취준을 안 한지 2년되어 최신 트렌드는 정확히는 말씀드리기 어렵습니다.

그렇기 때문에 기본적인 구현 능력과 위에 언급한 알고리즘 정도만 꾸준히 공부하셔서, 관련 문제들을 막힘없이 풀 수 있다면 대기업 알고리즘 테스트를 통과는 할 수 있다고 생각합니다.


***

## 그렇다면 CS를 안 중요한가요?

중소기업에서 알고리즘 테스트를 중요하게 하나요? 보통은 잘 안합니다. ACM-ICPC 대회를 못 들어본 사람이 더 많습니다. 사실 운영체제 달달 안 외워도 코딩만 좀 할 줄 알면 개발 잘 하긴 하니까요.


하지만 대기업은 말씀 드렸듯 다릅니다. 

쉽게 생각해봐도, 운영체제에 대해 잘 알고, 네트워크에 대해 잘 알고, 알고리즘에 대해 잘 아는 사람 VS 개발만 잘 하는 사람을 비교하면, 같은 문제를 주어졌을 때 전자의 경우 운영체제적으로, 네트워크 관련 관점에 따라 문제를 해결 할지 방법들을 고민 할 수 있습니다.

하지만 개발만 잘 하는 사람이라면 네트워크적인 부분을 고려하기 힘들 수 있고, 다양한 문제 해결 방법을 제시하기가 전자보다는 힘들 것이라고 생각합니다. [개발 != 당장 기능 동작하도록 스피디 코딩]이기 때문에 이 관점에서 CS도 당연히 중요하다 생각합니다.


지금까지 매우매우 주관적인 스토리였습니다. 감사합니다.


--


글 쓴다는 것이 생각보다 재밌어서 깃허브 정적 블로그를 만들었습니다.

보여줄만한 프로젝트가 아직은 없어서 일단 칼럼이나 평소 생각했던 개발 관련 글을 남길 예정입니다.


물론 모든 내용은 okky에서 보실 수 있도록 전문을 올릴 예정입니다.

https://spellofstar.github.io/post/why_company_ask_algorithm/


수정 이력

2020-04-22 11:47:37 에 아래 내용에서 변경 됨 #2


저번에 글 쓴거의 반응이 생각보다 좋아서 그냥 좀 더 제 생각들을 이것저것 올려보려고 합니다.


이런 글을 어디다 올릴지 몰라서 일단 사는얘기에 올립니다. 사는 얘기가 아니라 다른데 올릴 만한 곳 있으면 수정하겠습니다.


--

왜 회사들, 특히 대기업들이 알고리즘 테스트를 시행할까?


IT 직종의 대기업들은 대부분이 알고리즘 테스트를 하고 있습니다. 그러다 보니 많은 분들이 알고리즘을 공부 해야함을 알지만 어떤 식으로 공부를 할지, 어떤 알고리즘을 공부해야 할지, 갈피를 못 잡는 경우를

자주 보았습니다.


과연 왜 이 놈의 회사들은 알고리즘 테스트 같은 것들을 보는 것일까요?


[주의] 글 시작에 앞서 포트폴리오 관련 글을 보신 분들은 아시겠지만, 이 글 역시 저의 지나친 개인적인 생각을 기반으로 한 글임을 강조드립니다.


제 기억이 맞다면 알고리즘 테스트를 가장 먼저 도입한 곳은 삼성일 것입니다. 최초는 아니더라도 초기 정도에 시행했다고 생각이 듭니다. 그리고 우리나라의 회사들은 삼성의 트렌드를 따르는 경향이 있습니다. 너도나도 있어보이기 위해 알고리즘 테스트를 시행하기 시작했습니다.


그렇다면 왜, 그 놈의 알고리즘 테스트를 볼까요? 그에 앞서 대기업과 중견, 중소의 차이에 대해 생각해 보겠습니다.


***

## 대기업과 중소기업 무슨 차이가 있을까?

과연 대기업과 중소기업의 차이는 무엇이 있을까요? 연봉? 맞습니다. 대우? 맞습니다. 맞는 말이지만, 이 글에 주제와 관련된 가장 큰 차이는 바로 "신입을 키울 능력이 있는가 vs 실무 능력이 있어 바로 투입이 되는가"

라고 저는 생각합니다.


대기업은 신입을 키울 능력이 있습니다. 개발의 장점이 무엇인가요? 너도, 나도, 우리 모두 할 수 있습니다. 막 코딩을 해서라도, 누더기같은 인형 꿰맨 것 마냥 난리난 코드라도 누구든 짤 수 있습니다.

막말로, CS를 정확히 몰라도, 운영체제가 어떻게 돌아가는지, 시분할 시스템이 무엇인지, 세마포어가 무엇인지, OSI 7 계층이 무엇인지 몰라도, 우리는 개발을 할 수 있습니다.(말 그대로 막말입니다. 몰라도 된다라고는 안 했습니다)


하지만 대기업 입장에서 조금 개발을 해본 사람들?이 몰립니다. 그러나 그런 사람들이 절대 메리트를 가지고 우세하다고 저는 절대 생각하지 않습니다. 중소기업에서 spring으로 개발 1년 해보았다구요? 제가 대기업 임원이면 "그래서요?" 라고 답할 것 같습니다.

대기업 입장에서 사람들은 널렸습니다.


앞서 말한대로 대기업은 신입을 키울 능력이 있습니다. 그렇기 때문에 실무경험이 있다?가 대기업한텐 엄청 큰 메리트는 아닙니다. 그러면 대기업은 무얼 보고 신입을 뽑을까요? 제 생각이 맞다면 "가능성"이라고 생각합니다.


개발은 특별한 것이 아닙니다. 누구나 할 수 있습니다. 무식하게, 또는 지저분하게, 또는 평범하게, 그 중에서 비범해 보이는 가능성을 가진 사람을 뽑아다 키웁니다. 그러면 그 사람은 더 많은 포텐을 가지고 결과를 내올 가능성이 있거든요


그럼 이 가능성을 어떻게 판단을 할까요? 저는 18년도에 졸업한 시즌이라 그 전의 대기업들이 어떤 채용 절차를 거쳤는지는 모릅니다. 그저 기억하는 것은, 3학년 때 LG 공채에 영어 최저 자격증 제한이 있었는데, 4학년이 되니 그 자격 제한마저 사라졌다는 것입니다.

흔히 이전에는 스펙의 시대였겠구나라고 추론을 할 수 있습니다. 예전의 유명한 단어죠, 고스펙, 인턴십도하고 해외 봉사활동도하고 이런저런 활동을 하는 것으로 그 가능성을 평가 했을거라고 생각합니다.


하지만 고스펙이라고 다 똑부러지고 일을 잘하고 그런게 아니구나라고 느꼈는지 가능성의 척도를 스펙에서, 바로 이것, "문제 해결 능력"으로 갈아 탔다라는 것입니다.


이런 대기업과는 반대로  중소기업은 바로 실무에 투입이 되어야하니 당연히 먼저 개발을 해본 사람, 이것저것해본사람, 자기 회사와 기술스택이 맞는사람이 우선적이 되는 것 입니다.


***

## 문제 해결 능력은 무엇을 말하는가?

저는 알고리즘을 조금 공부해본 경험이 있습니다. ACM 대회도 준비를 해보았었고, 물론 본선도 가진 못하게 되었지만(문제를 3개나 풀었지만 1문제를 팀원 중 풀어줄 사람이 없었습니다. 팀탓입니다.)


제가 알고리즘을 처음 공부 할 때 왜 알고리즘을 공부해야하는지를 느낀 문제를 간단히 보여드리겠습니다.


"아나그램이란. APPLE - LEPPA 와 같이 같은 문자열로 구성된 단어를 아나그램이라고 합니다. 그렇다면 우리가 코드를 통해 두 개의 단어를 입력 받아서 애나그램 관계인지를 출력하고자 할 때,

어떤 방법이 있을까요? "


1. 보통 많은 사람들이 생각 할 방법으로 2중 반복문을 통해 왼쪽 단어 A와 오른쪽단어 전체를 비교, 그 이후 왼쪽단어 P와 오른쪽단어 전체를 비교, 이런 식으로 비교해가며 탐색 할 수 있습니다.

2. 왼쪽 단어를 퀵소트를 통해 AELPP로 정렬하고, 오른쪽 단어역시 정렬하여 AELPP로 정렬한 뒤 1중 반복문으로 각 배열 인덱스를 비교 할 수 있습니다.

3. 초짜였던 저는 저는 이 방법에 감탄했습니다. char 배열을 만들어 A=0, B=1, C=2 이런식으로 인덱스를 생각하고 각 값에 카운트를 넣습니다.


1번 방식은 2중 반복문을 사용하고, 2번 방식은 정렬과 1중 반복문을 통해 효율을 개선하였습니다. 3번은 심지어 정렬하는 기능도 없습니다.


저는 처음엔 당연히 1번 밖에 생각을 못했습니다. 그리고 친구의 3번 해답을 듣고 정말 충격을 먹었습니다. 똑같이 뇌를 가지고 있는데, 효율이 극적으로 차이나는 두개의 대답이 나온 것입니다.


예, 대기업은 이런 똑똑한 친구들을 뽑고 싶은 것입니다. 그냥 코딩이요? 말씀드렸듯 누구나 합니다. 하지만 문제를 어떻게 효율적으로 개선할지, 이것은 정말 천제가 아닌 이상 꾸준히 공부해야합니다.

그래서 삼성에서는 사내에서도 알고리즘 문제풀이로 능력을 매기는 시스템이 있다고 하죠.


제 생각엔 결국 개발자로 문제 해결 능력이라 하면 문제가 주어질때 이 사람이 어떻게 해결 할 것인지입니다. 사고 능력을 판단하기 위한 척도가 지금의 알고리즘 테스트가 되었습니다.


***

## 대기업 입사 알고리즘 테스트, 정말 어려울까요?

NHN은 서류를 100% 합격하고 코딩테스트를 보는걸 알고 계신가요? 삼성도 서류에서 탈락하기 의외로 어려운거 아시나요? 카카오는 서류도 심지어 보지 않는 다고 블라인드 공채를 하고 있습니다.


스펙이 의미가 없다는 말입니다. 삼성은 코딩테스트로 2문제 정도를 출제합니다. 2문제에 3시간, 인터넷에 보면 보통 1문제 맞으면 면접은 간다고 합니다. NHN의 경우 1차 코테로 알고리즘테스트를 보는데 보통 3문제 이상 맞으면 2차까지는 간다고 합니다. 대신 NHN는 CS 관련 2차 테스트가 있습니다.

이런 회사들 스타일에 따라서 몇몇 한 번쯤 이름을 들어본 유명 기업들도 열심히 따라서 서류는 뒷전이고 알고리즘 테스트를 1차, 2차 이런식으로 많이 봅니다.(1차, 2차 다 풀었지만 서류로 떨어뜨린건 안 비밀)


그러면 이런 알고리즘 테스트, 정말로 어려울까요?


저의 대답은 "그렇지 않다." 입니다. 대기업에서 진행하는 알고리즘 테스트는 ACM-ICPC와 같은 알고리즘 경진대회가 아닙니다. 조금 공부한 사람들도 많이 어렵다고 느끼는 네트워크 유량 문제, 이분 매칭 등의 문제는 나온 것을 본 적이 없습니다.

나오더라도 한, 두 문제로 대회 순위권자 정도 되는 사람이 아니라면 못 푸는 문제라고 생각합니다. 그러니 예외로 치겠습니다.


그런 문제를 제외하고는 백준의 시뮬레이션 문제 - 주어진 문제를 그대로 코딩만 할 수 있는지를 판단하는 류의 문제, 정말 기초적인 알고리즘, BFS, DFS, 다이나믹 프로그래밍 정도로 나옵니다. 이 부분은 제가 취준을 안 한지 2년되어 최신 트렌드는 정확히는 말씀드리기 어렵습니다.

그렇기 때문에 기본적인 구현 능력과 위에 언급한 알고리즘 정도만 꾸준히 공부하셔서, 관련 문제들을 막힘없이 풀 수 있다면 대기업 알고리즘 테스트를 통과는 할 수 있다고 생각합니다.


***

## 그렇다면 CS를 잘 안 중요한가요?

중소기업에서 알고리즘 테스트를 중요하게 하나요? 보통은 잘 안합니다. ACM-ICPC 대회를 못 들어본 사람이 더 많습니다.


OSI 7 계층을 몰라도, 심지어 네트워크에 대해 잘 몰라도, 운영체제를 잘 몰라도, 세마포어를 몰라도 개발은 할 수 있습니다.


하지만, 쉽게 생각해봐도, 운영체제에 대해 잘 알고, 네트워크에 대해 잘 알고, 알고리즘에 대해 잘 아는 사람 VS 개발만 잘 하는 사람을 비교하면, 같은 문제를 주어졌을 때 전자의 경우 운영체제적으로, 네트워크 관련 관점에 따라 문제를 해결 할지 방법들을 고민 할 수 있습니다.

하지만 개발만 잘 하는 사람이라면 네트워크적인 부분을 고려하기 힘들 수 있고, 다양한 문제 해결 방법을 제시하기가 전자보다는 힘들 것이라고 생각합니다. [개발 != 당장 기능 동작하도록 스피디 코딩]이기 때문에 이 관점에서 CS도 당연히 중요하다 생각합니다.


지금까지 매우매우 주관적인 스토리였습니다. 감사합니다.


--


글 쓴다는 것이 생각보다 재밌어서 깃허브 정적 블로그를 만들었습니다.

보여줄만한 프로젝트가 아직은 없어서 일단 칼럼이나 평소 생각했던 개발 관련 글을 남길 예정입니다.


물론 모든 내용은 okky에서 보실 수 있도록 전문을 올릴 예정입니다.

https://spellofstar.github.io/post/why_company_ask_algorithm/

2020-04-21 19:31:24 에 아래 내용에서 변경 됨 #1


저번에 글 쓴거의 반응이 생각보다 좋아서 그냥 좀 더 제 생각들을 이것저것 올려보려고 합니다.


이런 글을 어디다 올릴지 몰라서 일단 사는얘기에 올립니다. 사는 얘기가 아니라 다른데 올릴 만한 곳 있으면 수정하겠습니다.


--

왜 회사들, 특히 대기업들이 알고리즘 테스트를 시행할까?


IT 직종의 대기업들은 대부분이 알고리즘 테스트를 하고 있습니다. 그러다 보니 많은 분들이 알고리즘을 공부 해야함을 알지만 어떤 식으로 공부를 할지, 어떤 알고리즘을 공부해야 할지, 갈피를 못 잡는 경우를

자주 보았습니다.


과연 왜 이 놈의 회사들은 알고리즘 테스트 같은 것들을 보는 것일까요?


[주의] 글 시작에 앞서 포트폴리오 관련 글을 보신 분들은 아시겠지만, 이 글 역시 저의 지나친 개인적인 생각을 기반으로 한 글임을 강조드립니다.


제 기억이 맞다면 알고리즘 테스트를 가장 먼저 도입한 곳은 삼성일 것입니다. 최초는 아니더라도 초기 정도에 시행했다고 생각이 듭니다. 그리고 우리나라의 회사들은 삼성의 트렌드를 따르는 경향이 있습니다. 너도나도 있어보이기 위해 알고리즘 테스트를 시행하기 시작했습니다.


그렇다면 왜, 그 놈의 알고리즘 테스트를 볼까요? 그에 앞서 대기업과 중견, 중소의 차이에 대해 생각해 보겠습니다.


***

## 대기업과 중소기업 무슨 차이가 있을까?

과연 대기업과 중소기업의 차이는 무엇이 있을까요? 연봉? 맞습니다. 대우? 맞습니다. 맞는 말이지만, 이 글에 주제와 관련된 가장 큰 차이는 바로 "신입을 키울 능력이 있는가 vs 실무 능력이 있어 바로 투입이 되는가"

라고 저는 생각합니다.


대기업은 신입을 키울 능력이 있습니다. 개발의 장점이 무엇인가요? 너도, 나도, 우리 모두 할 수 있습니다. 막 코딩을 해서라도, 누더기같은 인형 꿰맨 것 마냥 난리난 코드라도 누구든 짤 수 있습니다.

막말로, CS를 정확히 몰라도, 운영체제가 어떻게 돌아가는지, 시분할 시스템이 무엇인지, 세마포어가 무엇인지, OSI 7 계층이 무엇인지 몰라도, 우리는 개발을 할 수 있습니다.(말 그대로 막말입니다. 몰라도 된다라고는 안 했습니다)


하지만 대기업 입장에서 조금 개발을 해본 사람들?이 몰립니다. 그러나 그런 사람들이 절대 메리트를 가지고 우세하다고 저는 절대 생각하지 않습니다. 중소기업에서 spring으로 개발 1년 해보았다구요? 제가 대기업 임원이면 "그래서요?" 라고 답할 것 같습니다.

대기업 입장에서 사람들은 널렸습니다.


앞서 말한대로 대기업은 신입을 키울 능력이 있습니다. 그렇기 때문에 실무경험이 있다?가 대기업한텐 엄청 큰 메리트는 아닙니다. 그러면 대기업은 무얼 보고 신입을 뽑을까요? 제 생각이 맞다면 "가능성"이라고 생각합니다.


개발은 특별한 것이 아닙니다. 누구나 할 수 있습니다. 무식하게, 또는 지저분하게, 또는 평범하게, 그 중에서 비범해 보이는 가능성을 가진 사람을 뽑아다 키웁니다. 그러면 그 사람은 더 많은 포텐을 가지고 결과를 내올 가능성이 있거든요


그럼 이 가능성을 어떻게 판단을 할까요? 저는 18년도에 졸업한 시즌이라 그 전의 대기업들이 어떤 채용 절차를 거쳤는지는 모릅니다. 그저 기억하는 것은, 3학년 때 LG 공채에 영어 최저 자격증 제한이 있었는데, 4학년이 되니 그 자격 제한마저 사라졌다는 것입니다.

흔히 이전에는 스펙의 시대였겠구나라고 추론을 할 수 있습니다. 예전의 유명한 단어죠, 고스펙, 인턴십도하고 해외 봉사활동도하고 이런저런 활동을 하는 것으로 그 가능성을 평가 했을거라고 생각합니다.


하지만 고스펙이라고 다 똑부러지고 일을 잘하고 그런게 아니구나라고 느꼈는지 가능성의 척도를 스펙에서, 바로 이것, "문제 해결 능력"으로 갈아 탔다라는 것입니다.


이런 대기업과는 반대로  중소기업은 바로 실무에 투입이 되어야하니 당연히 먼저 개발을 해본 사람, 이것저것해본사람, 자기 회사와 기술스택이 맞는사람이 우선적이 되는 것 입니다.


***

## 문제 해결 능력은 무엇을 말하는가?

저는 알고리즘을 조금 공부해본 경험이 있습니다. ACM 대회도 준비를 해보았었고, 물론 본선도 가진 못하게 되었지만(문제를 3개나 풀었지만 1문제를 팀원 중 풀어줄 사람이 없었습니다. 팀탓입니다.)


제가 알고리즘을 처음 공부 할 때 왜 알고리즘을 공부해야하는지를 느낀 문제를 간단히 보여드리겠습니다.


"아나그램이란. APPLE - LEPPA 와 같이 같은 문자열로 구성된 단어를 아나그램이라고 합니다. 그렇다면 우리가 코드를 통해 두 개의 단어를 입력 받아서 애나그램 관계인지를 출력하고자 할 때,

어떤 방법이 있을까요? "


1. 보통 많은 사람들이 생각 할 방법으로 2중 반복문을 통해 왼쪽 단어 A와 오른쪽단어 전체를 비교, 그 이후 왼쪽단어 P와 오른쪽단어 전체를 비교, 이런 식으로 비교해가며 탐색 할 수 있습니다.

2. 왼쪽 단어를 퀵소트를 통해 AELPP로 정렬하고, 오른쪽 단어역시 정렬하여 AELPP로 정렬한 뒤 1중 반복문으로 각 배열 인덱스를 비교 할 수 있습니다.

3. 초짜였던 저는 저는 이 방법에 감탄했습니다. char 배열을 만들어 A=0, B=1, C=2 이런식으로 인덱스를 생각하고 각 값에 카운트를 넣습니다.


1번 방식은 2중 반복문을 사용하고, 2번 방식은 정렬과 1중 반복문을 통해 효율을 개선하였습니다. 3번은 심지어 정렬하는 기능도 없습니다.


저는 처음엔 당연히 1번 밖에 생각을 못했습니다. 그리고 친구의 3번 해답을 듣고 정말 충격을 먹었습니다. 똑같이 뇌를 가지고 있는데, 효율이 극적으로 차이나는 두개의 대답이 나온 것입니다.


예, 대기업은 이런 똑똑한 친구들을 뽑고 싶은 것입니다. 그냥 코딩이요? 말씀드렸듯 누구나 합니다. 하지만 문제를 어떻게 효율적으로 개선할지, 이것은 정말 천제가 아닌 이상 꾸준히 공부해야합니다.

그래서 삼성에서는 사내에서도 알고리즘 문제풀이로 능력을 매기는 시스템이 있다고 하죠.


제 생각엔 결국 개발자로 문제 해결 능력이라 하면 문제가 주어질때 이 사람이 어떻게 해결 할 것인지입니다. 사고 능력을 판단하기 위한 척도가 지금의 알고리즘 테스트가 되었습니다.


***

## 대기업 입사 알고리즘 테스트, 정말 어려울까요?

NHN은 서류를 100% 합격하고 코딩테스트를 보는걸 알고 계신가요? 삼성도 서류에서 탈락하기 의외로 어려운거 아시나요? 카카오는 서류도 심지어 보지 않는 다고 블라인드 공채를 하고 있습니다.


스펙이 의미가 없다는 말입니다. 삼성은 코딩테스트로 2문제 정도를 출제합니다. 2문제에 3시간, 인터넷에 보면 보통 1문제 맞으면 면접은 간다고 합니다. NHN의 경우 1차 코테로 알고리즘테스트를 보는데 보통 3문제 이상 맞으면 2차까지는 간다고 합니다. 대신 NHN는 CS 관련 2차 테스트가 있습니다.

이런 회사들 스타일에 따라서 몇몇 한 번쯤 이름을 들어본 유명 기업들도 열심히 따라서 서류는 뒷전이고 알고리즘 테스트를 1차, 2차 이런식으로 많이 봅니다.(1차, 2차 다 풀었지만 서류로 떨어뜨린건 안 비밀)


그러면 이런 알고리즘 테스트, 정말로 어려울까요?


저의 대답은 "그렇지 않다." 입니다. 대기업에서 진행하는 알고리즘 테스트는 ACM-ICPC와 같은 알고리즘 경진대회가 아닙니다. 조금 공부한 사람들어 어렵다고 느끼는 네트워크 유량 문제, 이분 매칭 등의 문제는 나온 것을 본 적이 없습니다.

나오더라도 한, 두 문제로 대회 순위권자 정도 되는 사람이 아니라면 못푸는 문제라고 생각합니다. 그러니 예외로 치겠습니다.


그런 문제를 제외하고는 백준의 시뮬레이션 문제 - 주어진 문제를 그대로 코딩만 할 수 있는지를 판단하는 류의 문제, 정말 기초적인 알고리즘, BFS, DFS, 다이나믹 프로그래밍 정도로 나옵니다. 이 부분은 제가 취준을 안 한지 2년되어 최신 트렌드는 정확히는 말씀드리기 어렵습니다.

그렇기 때문에 기본적인 구현 능력과 위에 언급한 알고리즘 정도만 꾸준히 공부하셔서, 관련 문제들을 막힘없이 풀 수 있다면 대기업 알고리즘 테스트를 통과는 할 수 있다고 생각합니다.


***

## 그렇다면 CS를 잘 안 중요한가요?

중소기업에서 알고리즘 테스트를 중요하게 하나요? 보통은 잘 안합니다. ACM-ICPC 대회를 못 들어본 사람이 더 많습니다.


OSI 7 계층을 몰라도, 심지어 네트워크에 대해 잘 몰라도, 운영체제를 잘 몰라도, 세마포어를 몰라도 개발은 할 수 있습니다.


하지만, 쉽게 생각해봐도, 운영체제에 대해 잘 알고, 네트워크에 대해 잘 알고, 알고리즘에 대해 잘 아는 사람 VS 개발만 잘 하는 사람을 비교하면, 같은 문제를 주어졌을 때 전자의 경우 운영체제적으로, 네트워크 관련 관점에 따라 문제를 해결 할지 방법들을 고민 할 수 있습니다.

하지만 개발만 잘 하는 사람이라면 네트워크적인 부분을 고려하기 힘들 수 있고, 다양한 문제 해결 방법을 제시하기가 전자보다는 힘들 것이라고 생각합니다. [개발 != 당장 기능 동작하도록 스피디 코딩]이기 때문에 이 관점에서 CS도 당연히 중요하다 생각합니다.


지금까지 매우매우 주관적인 스토리였습니다. 감사합니다.


--


글 쓴다는 것이 생각보다 재밌어서 깃허브 정적 블로그를 만들었습니다.

보여줄만한 프로젝트가 아직은 없어서 일단 칼럼이나 평소 생각했던 개발 관련 글을 남길 예정입니다.


물론 모든 내용은 okky에서 보실 수 있도록 전문을 올릴 예정입니다.

https://spellofstar.github.io/post/why_company_ask_algorithm/