[Java]goorm test(구름TEST) 알고리즘 algorithm 점수 계산하기
안녕하세요 Leo 입니다.
이번 소개해줄 알고리즘 사이트는 구름TEST 라는 사이트 인데요,
NHN에서 투자 받아 개발한 알고리즘 사이트 입니다.
회사면접 코딩테스트를 하는 유명한 사이트죠...
저는 IOS (Object-c , Swift) 위주로 개발을 하고 가끔 안드로이드 개발을 하는데요...
회사에서 Java 로 코딩테스트를 하라고 해서 ... 하라면 해야죠... 풀어봤습니다.
제가 20문제 이상 푼것 같은데 이걸 공유 해드리도록 하죠...
이 글이 누군가에겐 "약"이 되고 누군가에겐 "독"이 될 것이다.
개발자라면 적어도 기본 알고리즘 정도는 스스로 학습하여 풀어봐야 한다.참고로 코딩테스트 문제를 제출 한 심사위원 분도제 블로그에서 답을 확인 한다는 것을 역으로 알아두고 보세요!! ㅎㅎ
알고리즘 문제
문제 : 모바일 퀴즈게임 구름Quiz에서는 사용자들에게 매일 열 개의 문제로 구성된 퀴즈를 제공하고 고득점 사용자들을 대상으로 매일매일 경품 추첨을 진행하고 있다. 매 일 정해진 시간에 퀴즈를 출제하는 구름 Quiz에서는 기존에 단순히 사용자가 맞춘 문제의 수대로 점수를 부여했기 때문에 한 번 몇 문제를 틀린 사용자들이 게임을 포기하는 경우가 종종 발생했다. 그래서 기획팀은 퀴즈의 채점 방식을 변경하기로 했는데 그 규칙은 아래와 같다.
사용자는 정해진 열 개의 문제를 한 번에 하나씩 차례대로 풀어야 한다.
틀린 문제는 0점을 부여한다.
문제를 맞추면 현재 연속으로 맞춘 정답에 비례해 k점을 부여한다.
k는 현재 오답 없이 연속으로 정답을 맞은 문제의 수이다.
현재 문제가 첫 문제이거나 앞의 문제가 오답이었다면 1점이 된다.
예를 들어서 한 사용자가 1번부터 10번 문제를 푼 결과를 [ O X X O O O X O O X ] 라고 한다면, 총 1 + 1 + 2 + 3 + 1 + 2 = 10점을 얻게 된다.
위의 예시처럼 사용자의 10문제에 대한 정오답 여부가 순서대로 주어질 때, 사용자가 얻게 될 점수를 계산하는 프로그램을 작성해보자.
입력 조건
한 줄의 입력이 주어진다. 문제의 입력은 대문자 O과 X로 이루어진 10글자의 문자열이다.
앞에서부터 순서대로 각 문제의 정오답 여부를 나타내며, O는 정답을 의미하고 X는 오답을 의미한다.
출력 조건
입력으로 주어진 퀴즈 정오답 결과를 바탕으로 규칙에 맞게 점수를 계산하여 출력한다.
입/출력 예시
⋇ 입출력 형식을 잘 지켜주세요.
␣ : 공백
↵ : 줄바꿈
−⇥ : 탭
보기 입력 1
OOXXXXXOOO
출력 1
9
보기 입력 2
XOOOXXXXOX
출력 2
7
======================================================================================================
풀이
======================================================================================================
/* package 구문을 넣으면 안됩니다 */
import java.util.*;
import java.io.*;
/* [Notice for Java]
* - 기본 제공되는 뼈대 코드는 입출력의 이해를 돕기위해 제공되었습니다.
* - 뼈대코드의 활용은 선택사항이며 코드를 직접 작성하여도 무관합니다.
*
* - 별도의 병렬 처리나 시스템콜, 네트워크/파일접근 등을 하지 마세요
* - 입출력의 양이 많은 문제는 BufferedReader와 BufferedWriter를 사용하면 시간을 단축할 수 있습니다.
* - 클래스 이름은 항상 Main이어야 합니다. 주의하세요.
* - 모든 입력과 출력은 System.in과 System.out 스트림을 이용해야 합니다.
*/
public class Main{
//표준입력을 수행할 Scanner를 선언한다
public static Scanner scanner = new Scanner(System.in);
public static void main(String[] args)
{ //프로그램의 시작부
String input = scanner.next();
String[] inputArr = input.split("");
if(input.length() > 10) return; //문제의 입력은 대문자 O과 X로 이루어진 10글자의 문자열이다.
int pluseAnswer = 1;
int savePluse = 0;
//Java regex 는 나중에 정리 O, X만 받아야한다. 시간이 없다.
for(int i=0; i <inputArr.length; i++){
if(inputArr[i].equals("O")){
//계산 공식 누적값 + 1;
savePluse = savePluse + pluseAnswer++;
if(10 != inputArr.length){ //마지막확인
//다음 값이 0 이라면 계산 값을 누적해라!
if(inputArr[i + 1].equals("O")){
savePluse = pluseAnswer;
}
}
}else{
//X 가 나오면 초기화 시켜야 한다.
pluseAnswer = 1;
}
}
int point = savePluse; //이 변수에 점수를 계산하여 저장한다.
System.out.println(point);
}
}
참고로 저는 알고리즘 풀이 점수는 높은 점수는 아닙니다.
일단 푸는 거에 집중했습니다. 알고리즘에 정답은 없습니다.
더 좋은 알고리즘을 만들어 내는게 목표 입니다.
알고리즘에 대하여 더 이야기 하실분은 댓글남겨주세요!
구름TEST 화면
구름TEST - 개발자 채용을 위한 코딩 테스트, 프로그래밍 시험
구름TEST는 LG전자, 라인, NHN, 스마일게이트 등에서 활용 중인 온라인 코딩 테스트 서비스입니다. 부서별, 직군별 시험 관리부터 문제 제작, 관리 기능과 응시자 초대 기능 등 개발자 채용을 위한 모든 기능을 제공합니다.
codingtest.goorm.io
구름테스트, 구름TEST 가 지원하는 프로그래밍 언어
그 외 Scala, Pascal, Lua, Objective-C, Rust, Cobol, Clojure, Smalltalk, Dart, Haskell, Perl, Common Lisp, D, Erlang 등
구름테스트, 구름TEST 를 2019년 현재 적용중인 회사