본문 바로가기
알고리즘 풀이/소프티어

[level 2] [21년 재직자 대회 예선] 전광판 (JAVA)

by cornsilk-tea 2023. 5. 10.

문제 요약

각각의 전구에는 스위치가 달려 있다. 전구에 달려 있는 스위치를 누를 때, 그 전구가 켜져 있었다면 꺼지고, 그 전구가 꺼져 있었다면 켜진다.
지금 전광판에 자연수 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까지의 전광판 배열을 확인하지 않아 초반에 허튼짓 좀 했다. 문제를 좀 확실히 읽고 노트를 생활화하자.

더 찾아볼만한 사항

없음