반응형
문제
https://www.acmicpc.net/problem/28702
코드
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int answer = -1;
for (int i = 0; i < 3; i++) {
String str = br.readLine();
if (isNumber(str)) {
answer = Integer.parseInt(str) + 3 - i;
break;
}
}
System.out.println(fizzBuss(answer));
}
private static boolean isNumber(String str) {
return str.chars().allMatch(Character::isDigit);
}
private static String fizzBuss(int n) {
if (n % 3 == 0 && n % 5 == 0) {
return "FizzBuzz";
} else if (n % 3 == 0) {
return "Fizz";
} else if (n % 5 == 0) {
return "Buzz";
} else {
return String.valueOf(n);
}
}
}
풀이
예제를 보자마자 떠오른 가장 이상적인 경우는, 연속으로 출력된 세 문자열 중에 적어도 한 개는 숫자 그대로(`i`) 출력되는 것이었다. 즉, 3의 배수도 아니고 5의 배수도 아닌 숫자가 반드시 끼어있어야 했다.
그래서 생각해보니깐,
- 연속된 세 정수이니깐 항상 3의 배수 하나 존재
- 나머지 두 수가 동시에 5의 배수일 가능성은 0
- 따라서 적어도 하나의 숫자는 3의 배수도 아니고 5의 배수도 아님
즉, 가장 이상적인 경우라는 것이다. 이제 아래처럼 로직을 짜면 끝이다.
- `isNumber` 함수를 통해 숫자인지 확인
- 숫자인 경우, 1, 2, 3 중 적절한 값을 더해 `answer`에 저장
- `fizzBuzz(answer)` 함수의 반환값을 출력
반응형
'백준' 카테고리의 다른 글
[백준] 30804: 과일 탕후루 (0) | 2025.04.30 |
---|---|
[백준] 7569: 토마토 (1) | 2025.04.29 |
[백준] 15829: Hashing (0) | 2025.04.22 |
[백준] 2667: 단지번호붙이기 (0) | 2025.04.21 |
[백준] 7568: 덩치 (0) | 2025.04.18 |