문제 요약
각각의 전구에는 스위치가 달려 있다. 전구에 달려 있는 스위치를 누를 때, 그 전구가 켜져 있었다면 꺼지고, 그 전구가 꺼져 있었다면 켜진다.
지금 전광판에 자연수 A가 표시되어 있는데, 유가가 변동됨에 따라 전광판에 표시된 자연수를 B로 바꿔야 한다. 이러한 목표를 달성하기 위해 스위치를 최소 몇 번 눌러야 하는지를 구하는 프로그램을 작성하라.
문제 분석
코드
import java.util.*;
import java.io.*;
public class Main
{
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static int[][] oldNum;
static int[][] newNum;
public static void main(String args[]) throws IOException
{
int tc = Integer.parseInt(br.readLine());
for(int i = 0; i < tc; i++){
StringTokenizer st = new StringTokenizer(br.readLine());
oldNum = makeNum(st.nextToken());
newNum = makeNum(st.nextToken());
int cnt = 0;
// for(int[] a : oldNum){
// System.out.println(Arrays.toString(a));
// }
// System.out.println();
// for(int[] a : newNum){
// System.out.println(Arrays.toString(a));
// }
for(int j = 0; j < 5; j++){
for(int c = 0; c < 7; c++){
if(oldNum[j][c] != newNum[j][c]){
// System.out.println("j ="+j+", c = "+c);
cnt++;
}
}
}
System.out.println(cnt);
}
}
static int[][] baseNum = {
{1, 1, 1, 0, 1, 1, 1}, // 0
{0, 0, 1, 0, 0, 1, 0}, // 1
{1, 0, 1, 1, 1, 0, 1}, // 2
{1, 0, 1, 1, 0, 1, 1}, // 3
{0, 1, 1, 1, 0, 1, 0}, // 4
{1, 1, 0, 1, 0, 1, 1}, // 5
{1, 1, 0, 1, 1, 1, 1}, // 6
{1, 1, 1, 0, 0, 1, 0}, // 7
{1, 1, 1, 1, 1, 1, 1}, // 8
{1, 1, 1, 1, 0, 1, 1} // 9
};
public static int[][] makeNum(String num){
int[][] tempNum = new int[5][7];
int[] nums = num.chars().map(c -> c-'0').toArray();
for(int i = nums.length-1; i >=0; i--){
tempNum[4 - (nums.length - 1 - i)] = baseNum[nums[i]];
}
return tempNum;
}
}
정리
새로 배운 내용
없음
개선할 점
노트를 사용하지 않고 머리로만 풀려다가 baseNum을 자꾸 잘못 만들었고, 문제에서 준 0~9까지의 전광판 배열을 확인하지 않아 초반에 허튼짓 좀 했다. 문제를 좀 확실히 읽고 노트를 생활화하자.
더 찾아볼만한 사항
없음
'알고리즘 풀이 > 소프티어' 카테고리의 다른 글
[level 2] [21년 재직자 대회 예선] 회의실 예약 (JAVA) (0) | 2023.05.10 |
---|---|
[level 2] [21년 재직자 대회 예선] 비밀 메뉴 (JAVA) (0) | 2023.05.10 |
[level 2] 지도 자동 구축 (JAVA) (0) | 2023.05.10 |
[level 2] 장애물 인식 프로그램 (JAVA) (0) | 2023.05.10 |
[level 2] 8단 변속기(JAVA) (0) | 2023.05.10 |