개발자 톡
연습문제 톡
[21년 재직자 대회 예선] 전광판
java - 정답 코드
- 등록일
- 2025-01-29 19:27:28
- 조회수
- 10
- 작성자
- tjsqls2067
import java.io.*; import java.util.*; public class Main { // 전광판 기록 배열 생성 private static int CNT_OF_NUM = 5; private static int SWITH_OF_ONE_NUM = 7; private static int[][] board = new int[CNT_OF_NUM][SWITH_OF_ONE_NUM]; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int T = Integer.parseInt(sc.nextLine()); // 1. 각 숫자 스위치 플래그를 배열에 저장 int[][] numPosArr = { {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 }; // 2. T개의 해당하는 테스트 케이스 순회 for(int cnt = 0; cnt < T; cnt++){ initBoard(); String[] strs = sc.nextLine().split(" "); String[] A = strs[0].split(""); String[] B = strs[1].split(""); // 2-1. 스위치 ON/OFF CNT 변수 생성 int cntOnOff = 0; // 3. A에 해당하는 숫자를 자릿수 별로 나누기 for(int i = A.length - 1; i >= 0; i--){ int numOfA = Integer.parseInt(A[i]); int[] rowOfNum = numPosArr[numOfA]; int[] rowOfBoard = board[CNT_OF_NUM - (A.length - i)]; for(int j = 0; j < SWITH_OF_ONE_NUM; j++){ if(rowOfNum[j] != rowOfBoard[j]){ rowOfBoard[j] = rowOfNum[j]; } } } // 4. B에 해당하는 숫자를 자릿수 별로 나누기 // 4-1. 현재 전광판과 각 숫자에 대해 ON/OFF 플래그가 다른 지점을 CNT 더해줌 for(int i = B.length - 1; i >= 0; i--){ int numOfB = Integer.parseInt(B[i]); int[] rowOfNum = numPosArr[numOfB]; int[] rowOfBoard = board[CNT_OF_NUM - (B.length - i)]; // 4-2. 스위치 ON/OFF한 CNT를 더해줌 for(int j = 0; j < SWITH_OF_ONE_NUM; j++){ if(rowOfNum[j] != rowOfBoard[j]){ cntOnOff++; rowOfBoard[j] = rowOfNum[j]; } } } // B의 길이보다 긴 A 자릿수 고려 if(A.length > B.length){ for(int i = 0; i < A.length - B.length; i++){ int numOfA = Integer.parseInt(A[i]); for(int tmp : numPosArr[numOfA]){ cntOnOff += tmp; } } } System.out.println(cntOnOff); } } private static void initBoard(){ for(int i = 0; i < CNT_OF_NUM; i++){ for(int j = 0; j < SWITH_OF_ONE_NUM; j++){ board[i][j] = 0; } } } }
#[21년_재직자_대회_예선]_전광판