[BOJ] 백준 1063. 킹

2024. 5. 7. 15:11· Java/BOJ

문제

https://www.acmicpc.net/problem/1063

 


풀이

 구현 문제입니다.  입력값을 어떤 형식으로 받을 것인지, 그리고 구현을 위한 메서드를 어떻게 나누고 적용할 것인지가 중요한 포인트 같습니다.

 

 처음 구현시에 입력값도 String으로 받고 메서드를 제대로 분리하지 못했더니 너무 코드가 난잡해져서, 다시 입력 자료구조와 메서드를 정의해 문제를 해결했습니다.

 

 우선 입력 시 char[] 배열을 통해 체스의 행과 열을 각각의 인덱스에 저장을 해주었습니다.

 

 메서드는 크게 두 가지인데, chess를 옮기는 것과 범위를 체크하는 것입니다. 이 메서드를 king과 stone을 옮길 때 모두 사용할 수 있게끔 유연하게 만들어주었습니다.

 

 그리고 조건에 통과해야지만, 이동된 배열 값에 업데이트를 시키는 방식으로 풀이를 진행했습니다. 

 

 아래는 소스 코드입니다.

 


소스 코드

import java.util.Arrays;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        char[] king = sc.next().toCharArray();
        char[] stone = sc.next().toCharArray();
        int N = sc.nextInt();
        for(int i=0;i<N;i++){
            String d = sc.next();
            char[] kingNext = king.clone();
            char[] stoneNext = stone.clone();
            moveChess(kingNext, d);
            if(!checkRange(kingNext)) continue;
            if(Arrays.equals(kingNext, stoneNext)){
                moveChess(stoneNext,d);
                if(!checkRange(stoneNext)) continue;
            }
            king = kingNext;
            stone = stoneNext;
        }
        System.out.println(king);
        System.out.println(stone);
    }

    static void moveChess(char[] next, String d){
        if(d.equals("R")){
            next[0]++;
        }
        if(d.equals("L")){
            next[0]--;
        }
        if(d.equals("B")){
            next[1]--;
        }
        if(d.equals("T")){
            next[1]++;
        }
        if(d.equals("RT")){
            next[0]++;
            next[1]++;
        }
        if(d.equals("LT")){
            next[0]--;
            next[1]++;
        }
        if(d.equals("RB")){
            next[0]++;
            next[1]--;
        }
        if(d.equals("LB")){
            next[0]--;
            next[1]--;
        }
    }

    static boolean checkRange(char[] next){
        if(next[1]<'1'||next[1]>'8'||next[0]<'A'||next[0]>'H') return false;
        else return true;
    }
}

'Java > BOJ' 카테고리의 다른 글

[BOJ] 백준 14267. 회사 문화 1  (0) 2024.05.10
[BOJ] 백준 3020. 개똥벌레  (0) 2024.05.08
[BOJ] 백준 18223. 민준이와 마산 그리고 건우  (0) 2024.05.06
[BOJ] 백준 15681. 트리와 쿼리  (0) 2024.05.04
[BOJ] 백준 21610. 마법사 상어와 비바라기  (0) 2024.04.29
'Java/BOJ' 카테고리의 다른 글
  • [BOJ] 백준 14267. 회사 문화 1
  • [BOJ] 백준 3020. 개똥벌레
  • [BOJ] 백준 18223. 민준이와 마산 그리고 건우
  • [BOJ] 백준 15681. 트리와 쿼리
동구름이
동구름이
동구름이
동구름
동구름이
전체
오늘
어제
  • 분류 전체보기 (178)
    • Java (63)
      • Java 를 파헤쳐보자 (13)
      • BOJ (45)
      • 프로그래머스 (3)
      • SWEA (1)
      • Java GUI (1)
    • JavaScript (17)
      • JS를 파헤쳐보자 (7)
      • 프로그래머스 (7)
      • JS 학습 정리 (1)
    • Backend (33)
      • Spring (3)
      • HTTP (7)
      • 프로젝트 (10)
      • MySQL (6)
      • Redis (3)
      • Elastic Search (1)
      • 인증, 인가 (3)
    • CS (57)
      • 운영체제 (35)
      • Network (22)
    • Git (2)
    • 개발 관련 이것저것 (2)
    • etc (1)
    • 독서 (0)
    • 사설 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 백준
  • 스택
  • Java
  • 큐
  • 레디스
  • 구현
  • OS
  • 자바스크립트
  • 모든 개발자를 위한 HTTP 웹 기본 지식
  • 반효경
  • 네트워크
  • 인프런
  • 한양대
  • 프로그래머스
  • 김영한
  • JCF
  • BOJ
  • 이석복
  • 운영체제
  • 자바

최근 글

hELLO · Designed By 정상우.v4.2.2
동구름이
[BOJ] 백준 1063. 킹
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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