저주의 숫자 3
Algorithm 관련 포스팅
- 최빈값 구하기
- k의 개수 구하기
- String
- 문자열 정렬하기
- 인덱스 바꾸기
- 제곱수 판별하기
- Math
- 배열 회전시키기
- A로 B 만들기
- 잘라서 배열로 저장하기
- Array와 ArrayList
- 저주의 숫자 3
이 글은 프로그래머스의 저주의 숫자 3의 풀이를 정리한 것입니다.
문제 설명
3x 마을 사람들은 3을 저주의 숫자라고 생각하기 때문에 3의 배수와 숫자 3을 사용하지 않습니다. 3x 마을 사람들의 숫자는 다음과 같습니다.
10진법 | 3x 마을에서 쓰는 숫자 | 10진법 | 3x 마을에서 쓰는 숫자 |
---|---|---|---|
1 | 1 | 6 | 8 |
2 | 2 | 7 | 10 |
3 | 4 | 8 | 11 |
4 | 5 | 9 | 14 |
5 | 7 | 10 | 16 |
정수 n
이 매개변수로 주어질 때, n
을 3x 마을에서 사용하는 숫자로 바꿔 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤
n
≤ 100
입출력 예
n | result |
---|---|
15 | 25 |
40 | 76 |
입출력 예 설명
입출력 예 #1
- 15를 3x 마을의 숫자로 변환하면 25입니다.
입출력 예 #2
- 40을 3x 마을의 숫자로 변환하면 76입니다.
나의 풀이(1)
- 주어진
n
값과 같은 길이의 빈 배열(answerArr
)을 생성 - 1부터 1씩 증가하는
i
를 for문으로 설정 i
가 3의 배수가 아니면서, 3을 포함하지 않을 때, 배열(answerArr
)에 인덱스(idx
) 0부터 차례로 수를 덮어 씀i % 3 != 0
: 3의 배수가 아님!String.valueOf(i).contains("3")
:int
를String
으로 변환한 뒤, 문자열"3"
을 포함하는 것이 아님
-
idx
가 주어진 n보다 하나 작은 값(n-1
)과 같게 되면, for문을 탈출(break
)→
n
이 15일 경우,idx
는 0부터 14까지 15개이므로
class Solution {
public int solution(int n) {
int answer = 0;
int idx = 0;
// 1.
int[] answerArr = new int[n];
// 2.
for (int i = 1; i >= 1; i++) {
// 3.
if (i % 3 != 0 && !String.valueOf(i).contains("3")) {
answerArr[idx] = i;
// 4.
if (idx == n -1) break;
idx++;
}
}
answer = answerArr[n-1];
return answer;
}
}
나의 풀이(2)
- 0부터 1씩 증가는
i
가,n
보다 작을 때까지 도는 for문 설정 i
마다answer
를 1씩 증가시킴answer
가 3의 배수이거나 숫자에"3"
이 있으면,answer
를 1 더 증가시킴- 즉, 해당 index(
i
)의answer
가 1 증가됨 -
n = 15
일때answer
값의 변화n 15 i 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 answer 0 1 2 4 5 7 8 10 11 14 16 17 19 20 22 while(answer) 1 2 3 5 6 8 9 11 12 15 17 18 20 21 23 answer++ 4 7 10 13 16 19 22 24 answer++ 14 25
- 즉, 해당 index(
class Solution {
public int solution(int n) {
int answer = 0;
// 1.
for (int i = 0; i < n; i++) {
// 2.
answer++;
// 3.
while (answer % 3 == 0 || String.valueOf(answer).contains("3")) {
answer++;
}
}
return answer;
}
}