본문 바로가기
코딩과 알고리즘

코딩테스트사이트 구름TEST 탐방(?)

코딩 테스트 사이트 구름?!
코딩테스트의 함정 케이스는?

https://codingtest.goorm.io/

 

구름TEST - 개발자 채용을 위한 코딩 테스트, 프로그래밍 시험

구름TEST는 LG전자, 라인, NHN, 스마일게이트 등에서 활용 중인 온라인 코딩 테스트 서비스입니다. 부서별, 직군별 시험 관리부터 문제 제작, 관리 기능과 응시자 초대 기능 등 개발자 채용을 위한 모든 기능을 제공합니다.

codingtest.goorm.io


코딩 사이트 중 구름 ( https://codingtest.goorm.io/ ) 사이트에 대해 기능을 살펴보았습니다.

구름 사이트는 좌측 상단에 단 5개의 메뉴로 구성되어 매우 깔끔한 이미지를 선보여 주고 있는데요.

기본으로는 회원가입을 해야 사용할 수 있으나
첫 화면의 "코딩 테스트 체험하기" 메뉴로 맛보기가 가능합니다.

그럼 들어가볼까요? 마우스로 클릭!
와우~ 들어가자 마자 마치 게임처럼 튜토리얼이 보입니다.
사용법을 안내해 주고 있는데요.

급하게 마음먹기 보다는 어느 정도 읽어나가면서 다음, 다음 진행해주시는게 좋습니다.
당장 이해가 안될지라도 반복해서 뇌에 각인되면 나중에 종합적으로 이해될 수 있거든요 :)

 

문제를 푸는데는 시간 제한이 있습니다.
화면 상단에 제한 시간이 표시되는데요.
캡쳐하고 글 쓰는동안 꽤 시간이 흘러갔군요.


화면 좌측의 지문을 읽으면서 어떻게 풀지를 생각하면서 진행하시면 되는데요.

보통 알고리즘들이 기초학습문제가 있고 응용문제가 있는가 하면 그 분야의 내공이 상당히 쌓여야 풀 수 있는 문제, 코딩 굇수들만 풀 수 있는 문제도 있으니 알고리즘 학습정도에 난이도가 결정될 겁니다.

처음 문제를 한번 확인해볼까요?
데모 시험은 약수를 구하는 문제입니다.

수학적으로 약수란 숫자를 나누어서 나머지가 없이 떨어지는 모든 수를 의미합니다.
이를테면 12의 약수는 1, 2, 3, 4, 6, 12 6개이지요.
한번 확인해볼까요?

12/1 = 12, 12 / 2 = 6, 12 / 3 = 4, 12 / 4 = 3, 12 / 6 = 2, 12 / 12 = 1

모두 나누어서 딱 떨어집니다.

하지만 5나 7같은 숫자는 나누어서 딱떨어지지 않습니다.

12 / 5 = 몫 2 나머지 2, 12 / 7 = 몫 1, 나머지 5

이 숫자를 컴퓨터가 구하도록 하는 겁니다.
알고리즘 ( 문제를 푸는 해법 ) 으로 말이죠 :)

오른 쪽 상단에는 언어 선택창과 코딩을 기록하게 되어 있는데요.
기본 코딩이 이미 되어 있어 편리하게 작업할 수 있도록 되어 있습니다.

만일 알고리즘을 위해 처음 코딩을 시작하신다면, C++ 을 추천합니다.
비록 C 언어가 속도 최강이긴 하지만 C++ 도 속도가 만만치 않습니다.
게다가 C 언어보다 기능이 많거든요.

알고리즘 문제 풀이중에서는 속도 때문에 못 푸는 문제도 꽤 많은데,
C++은 다른 언어보다 속도가 빨라 언어적 특성으로 간단히 풀 수 있는 경우도 있습니다.

자, 기본 코드가 나왔군요.

사실 기본으로 제공된 이 소스는 문제와는 관련이 없지만, 기본 명령어의 사용법이 나와 있어 생각나지 않을 때 참고할 수 있습니다.

#include <iostream>

using namespace std;
int main() {
	char input[100];
	cin >> input;
	cout << "Hello Goorm! Your input is " << input << endl;
	return 0;
}

 

int main() { 이후부터, return 0; 까지는 모두 삭제후 코드가 재작성되어야 합니다.

#include <iostream>

using namespace std;
int main() {
	  :
      :
	return 0;
}

한번 문제를 풀어볼까요?

우선, 숫자를입력받아야 합니다. 양의 정수를 입력받아야 한다고 하네요.

C++ 에서 정수를 입력받는 명령어는 cin 입니다.

하지만 먼저 입력받을 변수라는 상자를 마련해야 하는데요.

양의 정수이니 다음과 같이 선언합니다.

int n;

그리고 나서 n 이라는 상자에 숫자를 입력받습니다

cin >> n;

이어서 1부터 n 이라는 상자에 입력된 숫자까지 반복을 돌립니다.

반복을 돌리는 명령어가 for 문인데 보통 아래처럼 사용을 하지요.

for(int i=1; i<=n; ++i) {
      :
}

아래는 숫자가 딱 떨어지는지 확인해서 딱 떨어지는 경우 화면에 출력하는 소스입니다.

for(int i=1; i<=n; ++i) {
   if(n % i == 0)cout << i << " ";
}

분명 거의 다 된것 같은데요. 한번 실행해볼까요?

먼저 테스트 케이스를 실행하는게 좋습니다.

제출을 먼저 하면 한번에 못 맞추었을 경우 감점이 되거든요.

테스트 케이스는 왼쪽에 보이는 보기 입력의 예시가 주어집니다.

기대하는 마음으로 실행해보니 음?!

불일치!

틀렸다는 말인데요. 왜 그럴까요? 분명 숫자는 다 맞게 나온것 같은데 말이죠.

그것은 바로 공백문자의 구성 때문입니다.

사실 숫자를 출력할 때 띄어쓰기가 각 숫자사이마다 들어가는데요

예시를 자세히 보시면 맨 마지막 숫자 다음에는 띄어쓰기가 아니라 Enter 가 들어가게 되어 있지요. 이 것 때문에 틀린 겁니다.

이런걸 바로 함정이라고 하지요 :)

하지만 시험 볼 때는 이런 함정을 아무도 알려주지 않습니다.

스스로 알아내야 하는 것이지요.

크레이의 경험에 비추어 볼 때 알고리즘 문제들은 예상치 못한 함정 유형이 아주 많습니다.

예를 들면, 데이터가 1부터 나와야 하는데 0이나 음수가 주어진다거나,

주어지는 배열 데이터가 하나도 없거나,

숫자값 최대치가 int 정수의 범위를 벗어나 long 형 변수를 써야 하는 등 말이죠.

심지어, 실수값을 출력할 때 뒤에 나오는 소숫점의 자릿수가 같아야 하는 경우도 있습니다.

그게 안 맞으면 밑도 끝도 없이 "틀렸다~"고 나오기만 하고

주어지는 힌트는 아무것도 없는 것이지요 :)

이제 최종 해답을 보도록 할까요?

마지막 숫자를 제외한 곳에서는 공백을

마지막 숫자를 출력한 후에는 Enter 를 출력하는 소스입니다.

#include <iostream>

using namespace std;
int main() {
	int n=0;
	cin >> n;
	for(int i=1; i<=n; ++i) {
		if(n % i == 0)
		{
			cout << i;
			if(i<n)cout << " ";
			else cout << endl;
		}
	}	
	return 0;
}

그리고 테스트케이스를 실행하면,

'일치'!

이제 소스가 맞다는 확신이 선다면, 제출 버튼을 눌러 주시면 됩니다.

그러면 앞에서 예시로 든 테스트 케이스가 아닌 다른 자료로 몇번 더 검사하고 그 결과가 맞았는지 틀렸는지를 검사합니다. 해당 테스트 케이스는 공개되지 않습니다.

위의 소스는 4개의 숨겨진 테스트 케이스를 모두 통과!

이런 방식으로 문제를 푸는 겁니다 :)

사실 구름 TEST는 기업에서 사용하는 기능입니다.

기업에서 입사지원 개발자의 능력을 테스트하기 위해 비용을 지불하고

사용하는 서비스이지요.

회원 가입을 하신 다음에는 구름LEVEL 메뉴로 진입하시면 되는데요.

2019 년 9월 11일 현재 대략 300개 정도의 문제를 만나보실 수 있습니다.

디자인이 비교적 예쁜 사이트이고,

코딩할 때 자동완성 기능이 있어서 나름 코딩학습에 편리한 사이트입니다.

다만 문제수가 적은게 좀 아쉬운 느낌이 드는 사이트이지요 :)

아무쪼록 코딩 학습하시는 분들에게 도움이 되셨으면 하는 마음입니다 :)

여기까지 읽어주시느라 수고하셨습니다.

다른 코딩테스트 사이트도 구경하시려면?

코딩테스트 사이트 모음 게시글로 이동해 주세요.

https://itadventure.tistory.com/112

 

코딩 테스트 사이트가 이렇게 많아?

코딩관련해서 모의로 풀어보면서 바로 채점 가능한 시스템이 국내에 이렇게 사이트가 많은 줄 몰랐습니다 :) 더 많이 발견하는대로 쓱쓱 이 게시글에 넣어보도록 하겠습니다. ​ 백준 https://www.acmicpc.net 크..

itadventure.tistory.com

 

반응형