saurus2
Saurus2
saurus2
전체 방문자
오늘
어제
  • 분류 전체보기
    • 개발
      • AJAX
    • ML Ops
    • Profile
    • 음식점
    • 배낭여행
    • 컴퓨터공학
      • 알고리즘 공부
      • C++
      • Sever 스터디
      • Java spring
      • 알고리즘 _ 문제해결
      • 딥러닝
      • Java 정리
      • Python
      • LeetCode 1000
      • Machine Learning Study
      • Sign language Detection Pro..
      • LeetCode Solutions
    • 비콘
    • 데일리 리포트
    • 유학일기
      • 영어 공부
      • Daily
    • AI Master Degree
      • Data Mining
      • AI and Data engineering
      • Math Foundations for Decisi..
      • Natural Language Processing

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • c++
  • 알고리즘
  • 백준
  • 온라인저지
  • 파이썬
  • 리트코드
  • BFS
  • 딕셔너리
  • 문제해결능력
  • 개발자 취업준비
  • 딥러닝
  • LeetCode
  • two pointer
  • 릿코드
  • 개발자
  • 알고리즘문제해결
  • DFS
  • 취준
  • 취업준비
  • Python

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
saurus2

Saurus2

컴퓨터공학/알고리즘 _ 문제해결

1063 king 킹 시뮬레이션 백준 알고리즘 !

2017. 1. 4. 17:16


시뮬레이션 문제풀때 조건이 많아지면 항상 실수 한다... 삼성 소프트웨어 직군 역량 평가에서도 그랬지...
공통적으로 적용되는 조건을 정하고 그 조건 부터 수행하는게 정답인것 같다. 

킹 문제가 쉬운 부분에 속할태지만... 처음 모든 조건을 if문으로 해결하려고 했을때 어디서 
에러가, 오답이 났는지도 모르겠고 코드만 200줄이 되버려서 ....실패했다. 

다른 분의 코드를 참고하여 

킹을 옮길 좌표를 미리 구하고 킹이 떨어지면 탈출!
아니면 킹과 돌의 위치를 파악하여 돌도 같이 옮기고 돌이 떨어지면 탈출과 함께 
킹의 위치를 옮겼던 좌표를 되돌린다. 

코드가 1/4로 줄었다! 답도 통과 !!!

물론 if 문으로 가지치기해서 잘 적었으면 답이 통과 됬겠지만.... 

예외 찾다가 머리 터질것 같아서 그냥 새로 짰다.


킹 성공

시간 제한메모리 제한제출정답맞은 사람정답 비율
2 초128 MB84923921229.901%

문제

8*8크기의 체스판에 왕이 하나 있다. 킹의 현재 위치가 주어진다. 체스판에서 말의 위치는 다음과 같이 주어진다. 알파벳 하나와 숫자 하나로 이루어져 있는데, 알파벳은 열을 상징하고, 숫자는 행을 상징한다. 열은 가장 왼쪽 열이 A이고, 가장 오른쪽 열이 H까지 이고, 행은 가장 아래가 1이고 가장 위가 8이다. 예를 들어, 왼쪽 아래 코너는 A1이고, 그 오른쪽 칸은 B1이다.

킹은 다음과 같이 움직일 수 있다.

  • R : 한 칸 오른쪽으로
  • L : 한 칸 왼쪽으로
  • B : 한 칸 아래로
  • T : 한 칸 위로
  • RT : 오른쪽 위 대각선으로
  • LT : 왼쪽 위 대각선으로
  • RB : 오른쪽 아래 대각선으로
  • LB : 왼쪽 아래 대각선으로

체스판에는 돌이 하나 있는데, 돌과 같은 곳으로 이동할 때는, 돌을 킹이 움직인 방향과 같은 방향으로 한 칸 이동시킨다. 아래 그림을 참고하자.

입력으로 킹이 어떻게 움직여야 하는지 주어진다. 입력으로 주어진 대로 움직여서 킹이나 돌이 체스판 밖으로 나갈 경우에는 그 이동은 건너 뛰고 다음 이동을 한다.

킹과 돌의 마지막 위치를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 킹의 위치, 돌의 위치, 움직이는 횟수 N이 주어진다. 둘째 줄부터 N개의 줄에는 킹이 어떻게 움직어여 하는지 주어진다. N은 50보다 작거나 같은 자연수이고, 움직이는 정보는 위에 써 있는 8가지 중 하나이다.

출력

첫째 줄에 킹의 마지막 위치, 둘째 줄에 돌의 마지막 위치를 출력한다.

예제 입력 

A1 A2 5
B
L
LB
RB
LT

예제 출력 

A1
A2



































































#include <stdio.h>

#include <string.h>

int main(){

    char king[5],dol[5],w[5];

    int n =0;

    scanf("%s %s %d",king,dol,&n);

    while(n--){

        int x=0,y=0; 

// 매번 옮길 좌표 초기화 

        w[0]=0; w[1]=0;

// 마찬가지로 입력될 이동방향 초기화 

        scanf("%s",w);

        if(w[0]=='R'){

// 오른쪽 , 오른쪽 위 , 오른쪽 아래

            x++;

            if(w[1]=='T')

                y++;

            else if(w[1]=='B')

                y--;

        }else if(w[0]=='L'){

// 왼쪽, 왼쪽 위 , 왼쪽 아래 

            x--;

            if(w[1]=='T')

                y++;

            else if(w[1]=='B')

                y--;

        }else if(w[0]=='T')

// 위

            y++;

        else if(w[0]=='B')

// 아래

            y--;

// 이렇게 if문에 2중으로 하면 8가지의 방향을 짧게 걸러 낼 수 있다.

  

        if(king[0]+x>'H'||king[0]+x<'A'||king[1]+y>'8'||king[1]+y<'1') continue;

// 킹 아웃 확인

        king[0]+=x; king[1]+=y;

// 킹 아웃 아니면 방향대로 옮김 

        if(king[0]==dol[0] && king[1]==dol[1]){

// 옮긴 킹아래에 돌이 존재하면 돌님도 똑같이 옮기고 아웃 확인

            if(dol[0]+x>'H'||dol[0]+x<'A'||dol[1]+y>'8'||dol[1]+y<'1') {

                king[0]-=x; king[1]-=y;

// 아웃이면 킹님 재위치 

                continue;

            }

            dol[0]+=x; dol[1]+=y;

// 아웃도 아니면 돌님 이동 좌표 저장

        }

    }

    printf("%s\n",king);

    printf("%s",dol);

    return 0;

}


휴! 

저작자표시 (새창열림)

'컴퓨터공학 > 알고리즘 _ 문제해결' 카테고리의 다른 글

백준 2309 일곱난쟁이 브루트 포스  (0) 2017.01.13
10799 쇠막대기 백준 알고리즘 문제 스택  (0) 2017.01.08
1408 24 백준 알고리즘 온라인저지  (0) 2016.12.26
11653 소인수 분해 문제 백준 알고리즘  (0) 2016.12.22
백준 알고리즘 2934 소음 문제!  (0) 2016.12.22
    '컴퓨터공학/알고리즘 _ 문제해결' 카테고리의 다른 글
    • 백준 2309 일곱난쟁이 브루트 포스
    • 10799 쇠막대기 백준 알고리즘 문제 스택
    • 1408 24 백준 알고리즘 온라인저지
    • 11653 소인수 분해 문제 백준 알고리즘
    saurus2
    saurus2
    Simple is Best

    티스토리툴바