그래오늘은이거야

[Java]goorm test(구름TEST) 알고리즘 algorithm 점수 계산하기 본문

세상 개발/Java(SpringFramework)

[Java]goorm test(구름TEST) 알고리즘 algorithm 점수 계산하기

jinhongstar 2019. 8. 30. 15:15
728x90
반응형

안녕하세요 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 화면

 

 

 

 

https://codingtest.goorm.io/

 

구름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년 현재 적용중인 회사

 

 

 

반응형
Comments