저주의 숫자 3
문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/120871
접근 방식
- 숫자가 3으로 나누어 떨어지거나, 3이 들어가는 경우 그렇지 않을 때까지 숫자를 더한다.
잘못된 접근
class Solution {
public int solution(int n) {
int answer = 0;
for(int i=0; i<n; i++){
answer++;
while(answer%3==0 || answer/10==3 || answer%10==3){
answer++;
}
}
return answer;
}
}
테스트 케이스를 통과했지만, 제출에서 테스트 4번과 5번에서 실패가 나왔다.
테스트 케이스를 넣어보다가, answer가 100이상으로 올라가면서 십의자리가 3인 경우는 체크하지 못하고 있음을 알게되었다.
따라서, 백이상의 숫자에 대한 검사도 추가했다.
(answer%100)/10==3;
결과
소스 코드
class Solution {
public int solution(int n) {
int answer = 0;
for(int i=0; i<n; i++){
answer++;
while(answer%3==0 || answer/10==3 || answer%10==3 || (answer%100)/10==3){
answer++;
}
}
return answer;
}
}
다른 접근 방식
String을 이용한 방법
내가 사용했던 코드는 숫자만 이용했던 방법이고, String을 이용하면 while문을 만족하는 조건을 줄일 수 있고, 거의 무제한으로 계산할 수 있다.
변경 코드
class Solution {
public int solution(int n) {
int answer = 0;
for(int i=0; i<n; i++){
answer++;
// while문에서 answer를 String으로 변환하고, 여기에 3이 포함되어 있는지 여부를 판단
while(answer%3==0 || String.valueOf(answer).contains("3")){
answer++;
}
}
return answer;
}
}
알게 된 점
없음.