문제 지문 #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"가 보입니다.
혼자 풀이
전광판의 문자가 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..." 메뉴에서 불러다 쓰시면 됩니다.
'Programming > Cos Pro 1급' 카테고리의 다른 글
Cos Pro 1급 - 샘플 문제 풀이 3차 7번 (자리수 별 연산 방법) (1) | 2022.10.20 |
---|---|
Cos Pro 1급 - 샘플 문제 풀이 3차 6번 (n이하의 소수를 찾아 더하기) (1) | 2022.10.19 |
Cos Pro 1급 - 샘플 문제 풀이 3차 4번 (substring() 활용) (0) | 2022.10.18 |
Cos Pro 1급 - 샘플 문제 풀이 3차 3번 (ArrayList 활용) (0) | 2022.10.18 |
Cos Pro 1급 - 샘플 문제 풀이 3차 2번 (팰린드롬 문자열 찾기) (2) | 2022.10.17 |
댓글