https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV18_yw6I9MCFAZN
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
풀이 과정
N의 배수 번호인 양을 세면서 모든 숫자를 다 볼려면 양을 몇번 봐야 하는지 구하는 문제이다.
문제 그대로 모든 숫자를 다 볼 때 까지 계속 양을 센 횟수에 N을 더해주면 된다. 숫자를 모두 봤는지 판별할 때 어떤 숫자가 나왔는지를 저장하는 사이즈 10의 배열을 선언할 수도 있겠지만 비트마스킹을 사용해서 좀 더 빠르게 판단할 수 있다.
소스 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= T; tc++) {
int N = Integer.parseInt(br.readLine()); // 문제의 입력 N
int visited = 0; // 현재까지 본 숫자를 bit로 표현한 수, 2-4-5를 봤다면 0000110100 (2)
int target = (1 << 10) - 1; // 1111111111 (2) -> visited == target이면 모든 숫자 관찰
int answer = 0; // 양을 몇 번 세었는지 저장한다
while (visited != target) { // 모든 숫자를 볼 때 까지 반복한다
answer += N; // 양을 N번 더 센다
char[] ch = String.valueOf(answer).toCharArray(); // 숫자를 문자열로 변환 후 문자 배열로 저장한다
for (char c : ch) {
int num = c - '0'; // 문자 배열의 각 문자를 숫자 값으로 받는다
visited = visited | (1 << num); // 현재까지 본 숫자를 비트마스킹으로 표시해준다
}
}
System.out.printf("#%d %d\n", tc, answer);
} // end of testcase
} // end of main
} // end of class
'알고리즘 문제 풀이 > 삼성 Swea' 카테고리의 다른 글
SWEA 2115 - [모의 SW 역량테스트] 벌꿀채취 [파이썬] (0) | 2023.03.04 |
---|---|
SWEA 1231 - 중위 순회 [파이썬] (0) | 2023.02.11 |
SWEA 10726. 이진수 표현 [Java] (0) | 2023.02.04 |
SWEA 1954. 달팽이 숫자 [Java] (0) | 2023.01.22 |
SWEA - 1206. View (0) | 2022.07.24 |