본문 바로가기
✨ Club|Project/알튜비튜 e-class 튜터 | Algorithm

❇️ 알튜비튜 ❇️ - 3번째 (보조)강의 - 수

by 정람지 2023. 9. 13.
 

🫒해야 할 일

(9월 13일)

1. 코드 자세히~ ⭕️
2. 설명 준비 ⭕️
3. 과제 코드리뷰하기
4.원스탑튜터 ⭕️

+ clion 라이선스 체크하기
+ ⭐️다음 강의 자료만들기

이제 대면강의다~!~!~!~!응앙

 

아 아니엇음 줌이었다

괜히 옷 예쁘게 입고 갔네


👩🏻‍🏫 준비 👩🏻‍🏫

오늘은 보조 주차이므로 구현 문제 하나를 준비하면 된다.

 

1063번: 킹

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

www.acmicpc.net

#include<iostream>                                                                                                 
#include<string>                                                                                                   
#include<vector> //pair                                                                                            
                                                                                                                   
using namespace std;                                                                                               
typedef pair<char, char> cc; //pair<char, char> -> cc                                                              
                                                                                                                   
cc move(string input, char x, char y) {//이동 함수 x : 열, y : 행                                                        
    for (char how : input) {                                                                                       
        if (how == 'R') {                                                                                          
            x++;                                                                                                   
        }                                                                                                          
        else if (how == 'L') {                                                                                     
            x--;                                                                                                   
        }                                                                                                          
        else if (how == 'B') {                                                                                     
            y--;                                                                                                   
        }                                                                                                          
        else {//T                                                                                                  
            y++;                                                                                                   
                                                                                                                   
        }                                                                                                          
    }                                                                                                              
                                                                                                                   
    return { x, y };                                                                                               
                                                                                                                   
}                                                                                                                  
                                                                                                                   
bool checkRange(cc position) { //범위 체크 하는 함수                                                                       
    if (position.first < 'A' || position.first > 'H' || position.second < '1' || position.second > '8') {          
        return false;                                                                                              
    }                                                                                                              
    return true;                                                                                                   
}                                                                                                                  
                                                                                                                   
bool isSame(cc k, cc s) {                                                                                          
    return (k.first == s.first && k.second == s.second);                                                           
}                                                                                                                  
                                                                                                                   
/*                                                                                                                 
* HINT : 문자형 변수의 연산은 비교적 자유로워요! 또 킹과 돌의 움직임이 모두 판 안에서 이뤄질 때만 다음으로 움직일 수 있는 점을 신경써주세요!                              
* 1. king 이동 (move)                                                                                                
* 2. king과 stone의 위치 동일 -> stone 이동 (move)                                                                         
* 3. king과 stone의 위치 점검 (checkRange                                                                                
*/                                                                                                                 
                                                                                                                   
int main() {                                                                                                       
                                                                                                                   
    cc k, s; //king, stone                                                                                         
    int n;                                                                                                         
    string input;                                                                                                  
                                                                                                                   
    //입력                                                                                                           
    cin >> k.first >> k.second >> s.first >> s.second >> n;                                                        
                                                                                                                   
    //연산                                                                                                           
    while (n--) {                                                                                                  
        cin >> input;                                                                                              
                                                                                                                   
        cc next_k, next_s;//이동 후 위치 저장할 변수                                                                         
                                                                                                                   
        //king 이동                                                                                                  
        next_k = move(input, k.first, k.second);                                                                   
                                                                                                                   
        //stone 이동                                                                                                 
        if (isSame(next_k,s)) {//돌 위치와 겹치면                                                                         
            next_s = move(input, s.first, s.second);                                                               
        }                                                                                                          
        else {                                                                                                     
            next_s = s;                                                                                            
        }                                                                                                          
                                                                                                                   
        //범위 체크                                                                                                    
        if (checkRange(next_k) && checkRange(next_s)){//이동한 king과 stone가 유효 범위면 최종적으로 이동                           
            k = next_k;                                                                                            
            s = next_s;                                                                                            
        }                                                                                                          
                                                                                                                   
    }                                                                                                              
                                                                                                                   
    //출력                                                                                                           
    cout << k.first << k.second <<'\n'<< s.first << s.second ;                                                     
    return 0;                   
 }

👩🏻‍🏫 강의 👩🏻‍🏫

끝에 30분 정도만 하면 된다

 

이제 좀 익숙해진 듯


👩🏻‍🏫 코드리뷰 👩🏻‍🏫

**브루트 포스- 구현 문제 리뷰 완료!**

많이 제명되셨네..

감사합니다...ㅎㅎ