먼저 시작하기 전에 시험을 본다고 하면 정리를 하면서 하세요.

 

고시등 특정 시험에서 많이 하는 방법인데

같은 문제를 여러번 풀면 좋겠지만 시간이 많이 걸리니 풀고 문제에서 느낀 것을

(오답노트 같은?)

엑셀이나 노트에 정리하며서 하시면 실력을 오래 유지할 있습니다.

 

예를 들어 백준에서 어떤 문제를 풀었는데 문제가 DP 풀수 있었는데

DP 점화식이 좋았으면 간단히 문제와 점화식을 써두고 주기적으로 읽으면

문제를 여러번 효과가 있습니다.

 

알고리즘 뿐만 아니라 기술 면접 대비용이라도 나올만할 것은 따로 정리해서

주기적으로 읽어보면 정말 많은 도움이 됩니다.

평소에 전공책에서 구술로 물어볼 만한 것을 적습니다.

예를 들어 프로세스와 쓰레드의 차이점, 스케쥴링 방법의 종류와 정의

 

그냥 책을 여러번 읽으면 전체를 희미하게 알지만 특정 문제를 물어보면 답이 희미합니다.

개념의 원리, 이유, 정의와 유사/반대의 비교 등이 중요합니다.

이런 학습법을 T 자형 학습이라고 합니다. 하나만 걸리라는 것이지요.

 

, 이야기가 길어지는데

 

어제 이야기 제가 생각하는 온라인저지로 물어볼 문제는 아래 정도 일것 같습니다.

 

1) 시키는 대로 동작

2) 최대, 최소 구함

3) 최대 성능 구현

 

1) 시키는 대로 동작

- 모사의 1 문제 처럼 게임케릭터를 키를 받아 움직이고 아이템을 먹으면 점수획득, 적과 부딛히면 종료

- 간단한 계산기만들기

- 특정 규칙이 있는데 일정 시간 후에 상태를 표시

 

2) 최대, 최소 구현

 (이건 답이 정해져 있습니다.)

- 여러개 그룹짓기

- 여러 경로가 있는데 어떤 길로 가야 최대(최소) 점수를 얻을 있는가?

- 여러 개를 선택할 있는데 어떤 선택을 해야 최대 효과(점수) 있는가?

 

3) 최대 성능 구현

- 간단한 방법으로 구할 있는데 효과적인 방법으로 최대 성능을 구현

  예를 들어 일정시간내에 최대로 많은 소수 찾기,

 

1), 2) , 3) 모두 벗기면 책에 나온 알고리즘, 컴퓨터 구조등인데 여기에

이야기를 입히면 회사일이 됩니다.

특히 3)번으로 가면 단순한 알고리즘 뿐만 아니라 컴퓨터 구조에 나오는 캐시등을

이용하거나 일반 변수가 아닌 레지스터 변수, 보기쉽게 짜는 것이 아니라

효과적으로 짜는 성능을 우선하는 방법을 찾아야 합니다.

 

신입 사원이라면 1) 2),

경력 사원이라면 2) 3) 정도가 적당하지 않을까 생각합니다.

 

이왕 백준등에서 문제를 푼다면 해당 본인의 목표에 맞는 문제를 찾아서 풀어보세요.

( 백준과 아무 관련없습니다. 입에 붙어서)

 

 

일단 온라인저지에 익숙하지 않으시면 아래글 읽어보고 시작하세요.

온라인저지 시스템이 알수 있게 프로그램을 짜고 제출해야합니다.

https://algospot.com/wiki/read/%EC%95%8C%EA%B3%A0%EC%8A%A4%ED%8C%9F_%EC%98%A8%EB%9D%BC%EC%9D%B8_%EC%A0%80%EC%A7%80/%EC%B2%AB_%EB%B2%88%EC%A7%B8_%EB%AC%B8%EC%A0%9C_%ED%92%80%EA%B8%B0

 

그냥 혼자 알고리즘 책만 보고 공부하고 시험장 가면 정말로 후회하고 그냥 옵니다.

(찾아보시면 그냥 포기하고 오시는 그런 종류의 후기가 많이 나옵니다.)

 

온라인 저지가 맞지 않으신 분은 칠판에 적는 코딩인터뷰를 실시하는 회사에 지원하시거나

알고리즘 시험 없는 회사에 지원하시면 됩니다.

알고리즘 점점 중요해지겠지만 아직은 이런 시험 안보는 곳이 많습니다.

 

 

#삼성_소프트웨어_역량_테스트

온라인 시스템을 이야기하면 자체적으로 구현할 있겠지만 대부분

리눅스에서 돌아가는 오픈 소스를 사용하고 여기서는 컴파일 채점만 합니다.

(검색해보면 많이 나오니 실제로 리눅스 PC 설치를 해볼 있습니다.

 그렇게 해서 운영하는 학교나 동아리도 많이 있습니다

 대학교나 일부 고등학교에서도 수업시간에 이용을 합니다.)

 

1) 일부언어만 지원 

리눅스에 설치하는 컴파일러에 따라서 모든 언어를 지원할 있지만

관리의 용이성을 위해 C, C++, JAVA 범용? 언어만 지원하는 경우가 많으니

여러 회사를 지원한다면 파이썬 특별한 언어로 연습하지 않는 것이 좋습니다.

아니면 여러 언어를 자유자재로 있는 실력이면 좋겠지만

 

2) 사용할수 있는 라이브러리

프로그램을 짤때 여러가지 기본 라이브러리를 (string.h 라던가) 쓰면서 했다면

stdio.h 넣고 짜는 연습이 필요합니다. 시험에 사용할 있는 라이브러리가 제한됩니다.

malloc.h 같은 것을 못쓰는 경우도 있어서 메모리는 항상 배열로 잡아 쓰기도 합니다.

결정적으로 STL.h 없다 생각해야 합니다.

IOI(걸그룹 아닙니다. 정보올림피아드)에서도 쓸수 있는 라이브러리이고

대부분의 자료구조의 함수가 있어서 사용법만 알면 자료구조 함수를 외우거나

구현할 필요가 없는데 대부분 못쓰게 것입니다. PC에서는 써도 제출하면 제출서버에서

컴파일이 안되요.

 

후기를 보니 PC에서 pair 쓰고 구현했다가 서버에서 pair 안되어서 30 까먹었다는 것을 봤습니다.

저도 몰라서 pair 뭔지 봤더니 STL 라이브러리에서 제공하는 기능이었네요.

 

1문제를 1시간 30분에 풀어야 하는데 30분을 까먹으면 문제는 못푼다고 봐야죠.

그래서 많은 기본 함수로 제공하는 기능을 직접 짜봐야하는 연습이 필요합니다.

자료구조에서 배우는 , 스택 등의 코드를 포함해서

어떤 알로그리즘 대회는 종이 몇장에 한해서 미리 준비해 와도 된다는 대회도 있는데

대부분 입사시험은 그렇지 않을 것입니다. 그냥 맨몸입니다.

 

3) 채점사이트와 PC 차이

채점사이트에는 개발 환경이 안되어 있는 경우가 많고 제출 횟수에 제한이 있는 경우도 많아서

보통 PC 비주얼 스튜디오나 이클립스를 제공하여 컴파일 테스트를 하고 

채점 시스템에 붙여넣기를 하고 제출합니다.

일부 공개된 TC 맞아야 제출 의미가 있고 없는 TC 문제의 조건에

따라 만들어보고 테스트를 해보고 되면 제출해야 합니다.

위에서 이야기 처럼 제출 횟수가 있기 때문에 그렇구요.

(최대, 최소, 조건의 조합등 여러가지를 해보야 하지만 전체를 맞추는 사람이 없으면

 맞는 TC갯수로 세우는 경우가 있으니 100 아니라도 제츨해야 합니다.

 부분점수를 주기 좋은 시스템입니다.)

 

그런데 PC에서 되는 것도 채점 시스템에 안되는 경우가 많이 있습니다.

PC에서는 도는데 제출하면 TimeOver SegmentFault 발생합니다.

보통 친절하지 못한 채점시스템은 어디서 죽었는지 알려주지 않습니다.

로그도 없습니다. 그러니까 짜서 제출해야 합니다.

 

TimeOver 코드에 문제가 있어서 빨리 완료하지 못하는 경우가 많아서 그렇다고 치고

SegmentFault 원인을 찾지 못하는데 대부분 경우 배열의 범위를 넘어서 문제가 많이 발생합니다.

 

같은 TC 넣더라도 Visual Studio 너무 친절해서 배열의 범위를 넘어도 0으로 처리해 준다던가

해서 그냥 동작하는데 리눅스기반 채점사이트는 대부분 gcc일텐데 그냥 Segmentfault 입니다.

이것 발생하면 포인터나 배열의 범위를 넘었는지 확인해 보는 것이 필요합니다.

 

그리고 어떤 연습사이트의 온라인채점시스템은 예를 들면 10 TC 입력이 5, 5이고 결과 10 이어야 하는데

너는 9 나와서 틀렸다고 알려주는 시스템이 있는데

아마 시험보는 사이트는 그런 없습니다.

 

전체 몇개 중에 몇개를 맞았음이 입니다. 뭐가 틀리는지 알려주는 없습니다.

문제의 조건을 생각해서 코드를 고쳐야합니다.

 

 

이런 시험은 무궁무진한 종류 문제를 있겠지만 신입사원이고 온라인채점 시스템을

이용해야 한다면 어떤 문제가 나올 있을까 다음 시간에 생각해 보겠습니다.

 

새벽에 해외 주재원이 급한 일로 카톡을 보내 잠이 확깨서 처리하고 오늘은 일찍 써봤습니다.

이런 종류 시험 준비하시는 분들에게 도움이 되었으면 좋겠습니다.

 

#삼성_소프트웨어_역량_테스트

예전에는 정보올림피아드에서도 코드를 작성하고 실행화일을 제출하고

채점자가 여러가지 Test Case 넣어보는 방식으로는 진행을 하였으나

얼마전 부터는 국내 대회에서도 온라인 채점 방식으로 바뀌었습니다.

 

심지어는 제출하면 실시간(?)으로 순위와 점수를 표시해주기도 합니다.

 

최근 여러 회사에서 온라인채점 시스템으로 입사시험을 보는데

(검색해보니 S모사 말고도 몇회사가 있네요. 취준생들은 아시겠지요?)

 

온라인 시스템을 알면 도움이 되는 점이 있습니다.

 

온라인시스템으로 확인할 있는

1) 실행시간

2) 코드 크기 (컴파일전/실행화일)

3) 사용 메모리량 (메모리별)

4) 입력에 대한 출력 비교

 

온라인시스템으로 확인할 없는

1) Readability

2) 코딩 스텐다드

3) 알고리즘

4) 예상하지 못한 Test Case

 

재미 있는 것이 알고리즘(실제로는 Problem Solving 이지만시험을 보는 것인데

무슨 알고리즘을 사용했는지 없습니다.

 

알고리즘을  없으니 해당 알고리즘이 맞는지 여러가지 TC 대한 입력 결과와 출력 결과를

제출한 코드를 컴파일해서 비교해 보는 것입니다.

 

그래서 문제에는 기본적인 Test Case 주고 실제 많은 Test Case 채점시에 확인을 하는 것입니다.

 

만약 전체 Test Case 알려주면 모든 입력에 대해 출력을 하드코딩하는 경우

코드를 보지 않으면 확인 없습니다.

 

, 말이 길어지는데 여기서 한가지 힌트가 있는데

많은 알고리즘 책에 여러가지 정렬 알고리즘을 분석하고 있고 웹상에서 모사의 시험을 준비한다고

하면서 여러가지 정렬 알고리즘을 짜보고 코드를 올리는 분들 봤는데

 

온라인채점 시스템으로는 특정 정렬 알고리즘을 물어볼 없으니

특정 정렬 알고리즘으로 정렬을해라 하는 문제는 나올 없습니다.

정렬은 나중 면접용으로만 준비하시고 실기(?)시험 용으로는 하실 필요가 없습니다.

(정렬의 종류 특징, 어떤 경우에 빠르고 느리게 되는가 이런 것을 면접에서 답할 있는)

 

물론 정렬 알고리즘 별로 속도의 차이가 있으나 TC 따라 많이 다르기 때문에 구분을 없습니다.

가장 짜기 쉬운 정렬하나만 할줄 알면 됩니다. 대부분 그게 버블정렬이지요?

 

아주 특별한 정렬 알고리즘은 필요한데 이건 다음에 설명을 드리겠습니다.

 

#삼성_소프트웨어_역량_테스트

+ Recent posts