링크
https://www.acmicpc.net/problem/22251
주의점
- 0층 제외
알고리즘 선택과 근거
- 브루트포스
- 모든 층을 다 봐야한다.
- 구현
- 디스플레이 구현
접근 방식
디스플레이 표현
디스플레이를 이렇게 표현했다.
1번이 켜져있으면 0010010 이렇게 표현한다.
3이면 1011011
자릿수
1. 최대 자릿수가 같을 때까지 현재 층이나 호석이 층이나 둘 다 0 계속 추가
2. 체크할 때 자릿수마다 바뀐 LED 수 체크
하면 된다.
정답
import java.io.*;
import java.util.*;
public class Main {
static String[] num = {"1110111", "0010010", "1011101",
"1011011", "0111010", "1101011",
"1101111", "1010010", "1111111",
"1111011"}; // 디스플레이를 숫자로 표현한 배열
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken()); // 최대 층
int K = Integer.parseInt(st.nextToken()); // 디스플레이에 표현되는 수
int P = Integer.parseInt(st.nextToken()); // 최대 반전 개수
int X = Integer.parseInt(st.nextToken()); // 현재 층
int answer = 0;
String cur = String.valueOf(X);
// 현재 디스플레이에 표현되는 수 만큼 0 채우기
while (cur.length() < K) {
cur = "0" + cur;
}
for (int i = 1; i <= N; i++) {
// 같은 층이면 건너 뛰기
if (i == X) {
continue;
}
// 호석이가 테스트 해 볼 층 수
String hoseock = String.valueOf(i);
// 빌런 디스플레이에 표현되는 수 만큼 0 채우기
while(hoseock.length() < K) {
hoseock = "0" + hoseock;
}
// 반전 수 체크하기 위한 변수
int cnt = 0;
// K 자리수 까지 돌기
for (int j = 0; j < K; j++) {
// 현재 j번째 Led
String curLed = num[cur.charAt(j) - '0'];
// 호석 j번째 Led
String hoLed = num[hoseock.charAt(j) - '0'];
// 현재랑 호석이랑 Led 바뀐 곳 체크
for (int k = 0; k < 7; k++) {
if (curLed.charAt(k) != hoLed.charAt(k)) {
cnt++;
}
}
}
// P보다 바뀐게 적다면 answer++;
if (cnt <= P) {
answer++;
}
}
System.out.println(answer);
}
}
'코딩테스트 > 백준' 카테고리의 다른 글
[백준] 호석이 두 마리 치킨 (Java) (1) | 2025.01.04 |
---|---|
[백준] 퇴사 (Java) (0) | 2024.12.11 |
[백준] 스타트와 링크 (Java) (0) | 2024.12.11 |
[백준] 일곱 난쟁이 (Java) (0) | 2024.11.11 |