7회차 - 스도쿠 보드

2022. 7. 16. 09:24·TEAM STUDY/알고리즘 코딩 테스트 스터디
목차
  1. 문제4A-스도쿠 보드
728x90
반응형

문제4A-스도쿠 보드

 

스도쿠란 아래의 그림 처럼 9행 9열의 보드에 1~9사이의 숫자들을 규칙에 맞게 채워넣는 게임을 말한다.

9행 9열의 보드에는 총 81개의 칸이 있는데 지수는 보통 각 칸을 1~81로 번호를 붙여서 구별한다.

가장 왼쪽 위의 (1행 1열의)칸이 1번 칸이 되고 그 이후 오른쪽으로 가면서 번호를 하나 증가시킨다.

그리고 해당 행이 다 차면 다음줄로 넘어가 이를 반복한다.

 

<스도쿠 판의 각 칸에 지수가 매긴 번호(왼쪽)와 각 칸이 속한 그룹(오른쪽) 그림>

 

 스도쿠는 게임의 특징상 각 행과 각 열 그리고 3x3모양의 9칸으로 구성된 그룹에 1~9의 숫자가 하나씩만 들어가야 한다는 규칙이 있다.

그래서 각 칸에 숫자를 배치할 때 그 칸이 속한 그룹을 파악하고 규칙에 맞는지 확인하는 작업이 필요하다.

하지만 지수와 같이 스도쿠 게임을 하고 있는 예인이는 지수가 말하는 칸의 번호로 그 칸이 몇행 몇열에 위치한 칸이고 또 몇 번 그룹에 속한 칸인지 매번 계산하기가 힘이 들었다.

하지만 소심한 예인이는 자신보다 언니인 지수에게 이를 말하지 못하고 당신에게 도움을 요청했다.

지수가 말한 칸의 번호가 주어질 때, 그 칸이 속한 행, 열, 그룹의 번호를 계산해주는 프로그램을 작성해보자.

 

입력 형식

 이 문제는 여러개의 테스트케이스로 구성되어 있다.

첫 줄에는 테스트케이스의 수 T가 주어진다. T는 1이상 100이하의 자연수 중 하나이다.

각 테스트케이스에는 지수가 말한 칸의 번호가 1부터 81까지의 자연수로 공백없이 한 줄에 주어진다.

 

출력 형식

 모든 테스트케이스 별로 각 테스트케이스를 두 줄로 출력한다.

  • 테스트케이스의 첫 줄에는 Case #%d: 형식으로 테스트케이스의 번호를 출력한다. 대소문자와 공백에 주의한다.
  • 테스트케이스의 두 번째 줄에는 지수가 말한 칸의 행, 열, 그룹 번호를 공백으로 구분된 세 개의 자연수로 출력한다. r c g

import java.io.*;
import java.lang.*;
import java.util.*;

public class Main {
	
	public static final Scanner scanner = new Scanner(System.in);

	public static void testCase(int caseIndex) {

		SudokuBoard board = new SudokuBoard();
		int index = scanner.nextInt();

		// 칸의 번호로 행, 열, 그룹 번호를 계산한다
		int row =   board.getRowByIndex(index);
		int col =   board.getColByIndex(index);
		int group =  board.getGroupByIndex(index);

		// 정답을 출력한다
		System.out.printf("Case #%d:\n", caseIndex);
		System.out.printf("%d %d %d\n", row, col, group);
	}

	public static void main(String[] args) throws Exception {
		int caseSize = scanner.nextInt();

		for (int caseIndex = 1; caseIndex <= caseSize; caseIndex += 1) {
			testCase(caseIndex);
		}
	}
}

class SudokuBoard{
	static final int MAX_ROW = 9;
	static final int MAX_COL = 9;

	// 칸의 번호로 행의 번호를 계산하는 메소드
	public int getRowByIndex(int index){
		return ((index-1)/9)+1;
	}

	// 칸의 번호로 열의 번호를 계산하는 메소드
	public int getColByIndex(int index){
		return ((index - 1 ) % 9) + 1;
	}

	// 칸의 번호로 그룹 번호를 계산하는 메소드
	public int getGroupByIndex(int index){
		int r = getRowByIndex(index);
		int c = getColByIndex(index);
		return getGroupByPosition(r, c);
	}

	// 칸의 위치 (행, 열)로 그룹 번호를 계산하는 메소드
	public int getGroupByPosition(int row, int column){
		
		// 행의 번호를 통해서 그 행의 가장 왼쪽 그룹 번호를 계산한다.
		int left = ((row - 1) / 3) * 3+ 1;
		
		// 열의 번호를 통해 그 행의 가장 왼쪽 그룹 번호를 계산한다.
		int offset = ((column - 1) / 3);
		
		return left + offset;
	}

	// 칸의 위치 (행, 열)로 칸의 번호를 계산하는 메소드
	public int getIndexByPosition(int row, int column){
		int left = (row - 1) * 9 + 1;
		int offset = (column - 1);
		return left + offset;
	}
}

 

728x90
반응형
저작자표시 (새창열림)

'TEAM STUDY > 알고리즘 코딩 테스트 스터디' 카테고리의 다른 글

7회차 - 최대공약수와 최소공배수  (0) 2022.07.16
7회차 - Probing  (0) 2022.07.16
6회차 - 알고리즘 기록 : 과유불급 (어려웠던거 다시!)  (0) 2022.07.11
6회차 - 알고리즘 기록 : 네 카드 (어려웠던거 다시!)  (0) 2022.07.09
5회차 - 알고리즘 기록 : 세 카드  (0) 2022.07.02
  1. 문제4A-스도쿠 보드
'TEAM STUDY/알고리즘 코딩 테스트 스터디' 카테고리의 다른 글
  • 7회차 - 최대공약수와 최소공배수
  • 7회차 - Probing
  • 6회차 - 알고리즘 기록 : 과유불급 (어려웠던거 다시!)
  • 6회차 - 알고리즘 기록 : 네 카드 (어려웠던거 다시!)
Binsoo
Binsoo
내 트러블 슈팅
  • Binsoo
    정수빈 기술블로그임.
    Binsoo
  • 전체
    오늘
    어제
    • 빈수 개발자 개발 일기 (932)
      • 개발중 (634)
        • Spring Boot (95)
        • Spring Security (2)
        • Spring Batch (6)
        • Spring Boot & Redis (13)
        • Java Persistence API (JPA) (28)
        • Web (42)
        • Rest Api (7)
        • Spring Concurrency Control (3)
        • Redis (8)
        • Kubernetes (k8s) (4)
        • MYSQL (35)
        • AirFlow (15)
        • Docker (2)
        • Git (22)
        • Linux (9)
        • JSON Web Tokens (JWT) (4)
        • Troubleshooting (87)
        • Swagger (0)
        • Vue.js (52)
        • Java (74)
        • html (12)
        • C (5)
        • jQuery (15)
        • JavaServer Pages (JSP) (17)
        • Arduino (1)
        • JavaScript (35)
        • Amazon Web Services (AWS) (11)
        • Algorithm (9)
        • 참고 기능 (18)
        • mongo (2)
      • PROJECT (27)
        • 스프링부트+JPA+몽고 API 개발 (3)
        • MINI (2)
        • 게시판 (3)
        • vue 프로젝트 (1)
        • JPA 사이드 프로젝트 기록 (17)
      • TEAM STUDY (156)
        • 가상 면접 사례로 배우는 대규모 시스템 설계 기초 (8)
        • 한 권으로 읽는 컴퓨터 구조와 프로그래밍 (12)
        • NAVER DEVELOPER (4)
        • LINUX (23)
        • PYTHON (19)
        • SERVER (8)
        • 알고리즘 코딩 테스트 스터디 (31)
        • 쿠버네티스 (40)
        • 대세는 쿠버네티스 [초급~중급] (11)
      • BOOK (0)
      • 자격증 (61)
        • 리눅스 1급 - 필기 기록 (19)
        • 네트워크 관리사 (2)
        • 네트워크 관리사 2급 - 실기 기록 (21)
        • 네트워크 관리사 2급 - 필기 기록 (16)
        • 정보처리 (2)
      • 직장인 대학원 (17)
        • 기록 (1)
        • 캐글 스터디 (3)
        • R (12)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Git 저장소
    파이썬
    VUE
    스프링
    파이썬 알고리즘
    리눅스 1급 요약
    네트워크 관리사 2급
    java
    리눅스 마스터 요약
    jpa
    springboot
    쿠버네티스
    네트워크 관리사 자격증
    리눅스 마스터 1급 요약
    네트워크 관리사
    redis
    네트워크 관리사 요약
    REST API
    BackendDevelopment
    알고리즘
    Spring
    git
    리눅스 마스터 1급 정리
    네트워크 관리사 학점
    리눅스 마스터 1급
    쿠버네티스 스터디
    네트워크 관리사 2급 실기
    네트워크 관리사 실기
    docker
    리눅스 마스터
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
Binsoo
7회차 - 스도쿠 보드

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.