처음에는 '3,6,9'라는 게임이 숫자를 취급하기 때문에
문자열로 저장되는 입력값을 정수형으로 형변환 후 for문을 통해서 쉽게 답을 구할 수 있을 것이라 판단했습니다.
[ First Try ]
0. 예제로 십의 자리 숫자 10과 35가 나왔기 때문에 해당 조건만 생각
1. 정수는 10의 제곱들의 합으로 표현가능
예) 35 = 3*10^1 + 5*10^0
2. 숫자 1~입력된숫자 범위에서 각 숫자를 10으로 나누었을 때
그 몫과 나머지가 3,6,9인 경우를 계산하여 count하는 로직을 작성.
하지만 위처럼 계산하면 숫자가 100을 넘어갈 때 의도한 결과가 나오지 않습니다. 덕분에 4,5번 테스트에서 통과할 수 없었고 100 or 그 이상의 숫자들을 계산하기 위해서는 조건들이 다양해지고 코드역시 복잡해졌습니다.
Q. 어떻게 해야 어떤 숫자가 입력되더라도 게임의 룰에 따라 박수를 칠 수 있을 까요?
-> 입력된 숫자의 각 자리를 쪼개서 계산하는 것입니다.
숫자는 쪼개기 어려우나 문자열은 쉽게 쪼갤 수 있는 점이 이 문제를 해결하는 데 가장 유효한 키였습니다.
[ Second Try ]
0. 1부터 입력된 정수값까지의 범위로 For Loop설정
1. 게임이 진행될 때 판단할 숫자를 toString()를 활용해 strI에 대입
2. 문자열로 변한 숫자를 charAt()메서드를 활용해 각 자리별로 쪼갠 뒤 정수형 배열 arrGame[] 에 저장 (이 때, digit()메서드로 정수로 변환)
3. arrGame 각각의 요소를 switch ~ case 구문을 활용해 369 조건에 맞추어 카운트
---------------------------------------------------------------------------------------------------------------------------------
설명부분을 읽었을 때와 달리 풀면서 매우 어려웠던 문제였습니다.
하지만, 이 문제를 풀면서 기본 클래스들의 다양한 메서드를 활용할 수 있어서 많은 도움이 되었습니다.
---------------------------------------------------------------------------------------------------------------------------------
Integer
- parseInt(String str) : str을 정수로 반환 (십진법)
- toString(int i) : String으로 변환
String
- length(String str) : Returns the length of this string. (문자열의 길이를 반환. 개별문자의 수와 동일)
The length is equal to the number of Unicode code units in the string.
- charAt(int index) : Returns the char value at the specified index. An index ranges from 0 to length()
index번호에 해당하는 char를 반환하는 메서드입니다.
문자열의 index번호 역시 0부터 시작합니다.
Character
- digit(char ch, int radix) : Returns the numeric value of the character ch in the specified radix.
ch에 해당하는 숫자값을 반환합니다. (radix 기준)
(radix는 기수로 10진법, 2진법과 같이 숫자표기방법이라고 생각할 수 있습니다.)
// 0~9범위 숫자의 아스키코드값: 48~57
char ch = 50; // 코드표에서 2를 의미
System.out.println(Character.digit(ch, 10)); // ch를 10진법으로 표기
<코드소스>
<테스트결과>
<참고>
숫자를 문자로 쪼개는 아이디어
1단계 : 369 게임 :: 이것저것 쓰는공간 (tistory.com)
기수란? (radix)
StringBuilder (Java SE 16 & JDK 16) (oracle.com)
'코딩연습' 카테고리의 다른 글
[코딩연습] 여름의 대삼각형 (구름 - 1단계) (0) | 2021.05.12 |
---|---|
[코딩연습]태민이의 취미 (구름-1단계) [통과x] (0) | 2021.05.10 |
고장난 컴퓨터 - level 1(구름, Java) (0) | 2021.05.09 |
[코딩연습] 시험성적 평균과 등급 구하기 (구름-1단계) (0) | 2021.05.03 |
[코딩연습] 약수 구하기 (1단계) (0) | 2021.05.01 |