본문 바로가기
Programming/Cos Pro 1급

Cos Pro 1급 - 샘플 문제 풀이 3차 5번 (전광판 어플 문구 출력하기)

by 우공80 2022. 10. 19.
728x90

전광판에 문구 출력하기

문제 지문 #5


핸드폰 화면에 문구를 출력해주는 전광판 어플이 있습니다. 문구는 "happy-birthday"로 설정하였습니다. 전광판 어플은 다음과 같은 규칙으로 화면에 문구를 출력해 줍니다.

  • 어플은 화면에 14자 문구를 출력합니다.
  • 문구는 1초에 왼쪽으로 한 칸씩 움직입니다.
  • 문구 이외의 부분은 "_"로 표시됩니다.
  • 어플은 설정한 문구를 화면에 반복해 출력합니다.
  • 어플은 문구가 다 지나가면 설정한 문구를 반복해 보여줍니다.
예를 들어, 처음에는 화면에 "______________"가 보입니다.
3초 뒤에는 화면에 "___________hap"가 보입니다.
14초 뒤에는 화면에 "happy-birthday"가 보입니다.
20초 뒤에는 화면에 "birthday_____"가 보입니다.
28초 뒤에는 모든 문자열이 지나간 후 "______________"가 보입니다.
29초 뒤에는 다시 첫 번째 문자부터 나타나며, "_____________h"가 보입니다.

문구를 담은 문자열 phrases와 초를 담은 second가 매개변수로 주어질 때, 화면에 보이는 문자열을 출력하도록 solution 메서드를 작성해 주세요.
단, '_'는 공백을 나타냅니다.


매개변수 설명

문구를 담은 문자열 phrases와 초를 담은 second가 solution 메소드의 매개변수로 주어집니다.

  • phrases는 "happy-birthday"입니다.
  • second는 1 이상 10,000 이하인 자연수입니다.

return값 설명

solution 메소드는 화면에 보이는 문자열을 return 합니다.


예시

phrases second return
"happy-birthday" 3 "___hap"

예시 설명

화면 처음상태인 "__"에서 3초가 지나면 화면에는 글자 3개가 왼쪽으로 옮겨진 상태인 "___hap"가 보입니다.

728x90

 

혼자 풀이


전광판의 문자가 28초 주기로 돌아간다는 것만 파악이 되면, substring을 이용해서 로직을 구현하는데 큰 어려움이 없었습니다. substring의 입력 매개변수가 헷갈릴 수 있기 때문에, 잘 이해해두는 것이 좋겠습니다.

/*************************************************************
   3차 5번 전광판 어플 문구 출력하기
 ************************************************************/
// 다음과 같이 import를 사용할 수 있습니다.

class MySolution {
    public String solution(String phrases, int second) {
        // 여기에 코드를 작성해주세요.
        String answer = "";
        String blank = "______________";  //14칸 언더바
        if(second%28 <15){  //전체는 28초 주기로 돌아가며, 각 주기의 0~14초는 blank가 앞에 온다
            answer=blank.substring(0,14-second%28)+phrases.substring(0,second%28);
        }else{  //각 주기의 15~28초는 phrases가 앞에 온다. phrases의 뒷부분이 표시된다.
            answer=phrases.substring(second%28-14)+blank.substring(0,14-(second%28-14));
        }
        return answer;
    }
    
    // 아래는 테스트케이스 출력을 해보기 위한 main 메소드입니다.
    public static void main(String[] args) {
        MySolution sol = new MySolution();
        String phrases = new String("happy-birthday");
        int second = 3;
        String ret = sol.solution(phrases, second);
        // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
        System.out.println("solution 메소드의 반환 값은 " + ret + " 입니다.");
    }
}

 

정답


정답에서는 "______________"를 phrases에 먼저 붙였습니다.
그리고, for문을 돌면서, 매초 경과시마다 display의 첫 글자를 display 뒤에 붙이고,
display의 첫글자를 제외한 14자리를 반환하였습니다. 

class CorrectSolution {
    public String solution(String phrases, int second) {
        String answer = "";
        String display = "";
        display = "______________" + phrases;
        for(int i = 0; i < second; ++i) {
        	display = display + Character.toString(display.charAt(0));
        	display = display.substring(1);
        }
        answer = display.substring(0,14);
        return answer;
    }
}

 

첨부 파일

프로젝트 파일 전체를 첨부합니다.
Solution 이 문제, CorrectSolution 이 정답, MySolution이 제가 푼 것입니다.
"Project from existing sources..." 메뉴에서 불러다 쓰시면 됩니다.

ThirdQuestion5.zip
0.01MB

출처: https://www.ybmit.com/cos_pro/cos_pro_r_test.jsp

728x90

댓글