Junior-Developer
Home
  • Category (316)
    • 문제풀이 (270)
      • 백준oj (201)
      • 프로그래머스 (53)
      • 명품 자바 프로그래밍(개정4판) (11)
      • 구름 (5)
    • 알고리즘 (6)
    • Node.js (2)
    • 체크리스트 (37)
블로그 내 검색
Home

Junior-Developer

1일 1커밋! 1일 1 백준!

  • 문제풀이/백준oj

    [백준oj] 1063번 킹

    2020. 11. 11.

    by. Hyeon-Uk

    반응형

    www.acmicpc.net/problem/1063

     

    1063번: 킹

    8*8크기의 체스판에 왕이 하나 있다. 킹의 현재 위치가 주어진다. 체스판에서 말의 위치는 다음과 같이 주어진다. 알파벳 하나와 숫자 하나로 이루어져 있는데, 알파벳은 열을 상징하고, 숫자는

    www.acmicpc.net


     

    주어진 조건들을 하나하나 차근차근 따져가며 조건문을 통해 move함수를 만들었습니다.

    #include<iostream>
    #include<cstdio>
    #include<string>
    using namespace std;
    
    int arr[8][8] = { 0 };
    int ki, kj;
    int si, sj;
    void move(string str) {
    	if (str == "R") {
    		if (kj + 1 >= 8) {
    			return;
    		}
    		if (ki == si && kj + 1 == sj) {
    			if (sj + 1 >= 8) {
    				return;
    			}
    			else {
    				sj++;
    			}
    		}
    		kj++;
    	}
    	else if (str == "L") {
    		if (kj - 1 < 0) {
    			return;
    		}
    		if (ki == si && kj - 1 == sj) {
    			if (sj - 1 < 0) {
    				return;
    			}
    			else {
    				sj--;
    			}
    		}
    		kj--;
    	}
    	else if (str == "T") {
    		if (ki - 1 < 0) {
    			return;
    		}
    		if (kj == sj && ki - 1 == si) {
    			if (si - 1 < 0) {
    				return;
    			}
    			else {
    				si--;
    			}
    		}
    		ki--;
    	}
    	else if (str == "B") {
    		if (ki + 1 >= 8) {
    			return;
    		}
    		if (kj == sj && ki + 1 == si) {
    			if (si + 1 >= 8) {
    				return;
    			}
    			else {
    				si++;
    			}
    		}
    		ki++;
    	}
    	else if (str == "RT") {
    		if (ki - 1 < 0 || kj + 1 >= 8) {
    			return;
    		}
    		if (kj + 1 == sj && ki - 1 == si) {
    			if (sj + 1 >= 8 || si - 1 < 0) {
    				return;
    			}
    			else {
    				sj++;
    				si--;
    			}
    		}
    		ki--;
    		kj++;
    	}
    	else if (str == "LT") {
    		if (ki - 1 < 0 || kj - 1 < 0) {
    			return;
    		}
    		if (ki - 1 == si && kj - 1 == sj) {
    			if (sj - 1 < 0 || si - 1 < 0) {
    				return;
    			}
    			else {
    				si--;
    				sj--;
    			}
    		}
    		ki--;
    		kj--;
    	}
    	else if (str == "RB") {
    		if (ki + 1 >= 8 || kj + 1 >= 8) {
    			return;
    		}
    		if (ki + 1 == si && kj + 1 == sj) {
    			if (si + 1 >= 8 || sj + 1 >= 8) {
    				return;
    			}
    			else {
    				si++;
    				sj++;
    			}
    		}
    		ki++;
    		kj++;
    	}
    	else {
    		if (ki + 1 >= 8 || kj - 1 < 0) {
    			return;
    		}
    		if (ki + 1 == si && kj - 1 == sj) {
    			if (si + 1 >= 8 || sj - 1 < 0) {
    				return;
    			}
    			else {
    				si++;
    				sj--;
    			}
    		}
    		ki++;
    		kj--;
    	}
    }
    
    int main() {
    	string king, stone;
    	int n;
    	cin >> king >> stone>>n;
    	//KING = 1 , STONE = 2
    	ki = 8 - (king.at(1) - '0');
    	kj = king.at(0) - 'A';
    	arr[ki][kj] = 1;
    	si = 8 - (stone.at(1) - '0');
    	sj = stone.at(0) - 'A';
    	arr[si][sj] = 2;
    	for (int i = 0; i < n; i++) {
    		string op;
    		cin >> op;
    		move(op);
    	}
    	cout << (char)('A'+kj) << 8 - ki << "\n" << (char)('A'+sj) << 8 - si << "\n";
    }
    반응형

    '문제풀이 > 백준oj' 카테고리의 다른 글

    [백준oj] 1500번 최대 곱  (0) 2020.11.19
    [백준oj] 1145번 적어도 대부분의 배수  (0) 2020.11.12
    [백준oj] 1010번 다리놓기  (0) 2020.11.11
    [백준oj] 2420번 사파리월드  (0) 2020.11.05
    [백준oj] 1297번 TV 크기  (0) 2020.11.05

    댓글

    관련글

    • [백준oj] 1500번 최대 곱 2020.11.19
    • [백준oj] 1145번 적어도 대부분의 배수 2020.11.12
    • [백준oj] 1010번 다리놓기 2020.11.11
    • [백준oj] 2420번 사파리월드 2020.11.05
    맨 위로
전체 글 보기
Tistory 로그인
Tistory 로그아웃
로그아웃 글쓰기 관리

Today

Total

Powered by ⓒ Kakao Corp.

Designed by Nana
블로그 이미지
Hyeon-Uk

티스토리툴바