Devlog
Published 2022. 1. 10. 21:37
[백준 20436] ZOAC 3 스터디/알고리즘
#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main(){
    string SL, SR;
    string str;
    int time = 0;
    string keyboard[3][10]={
        {'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p'},
        {'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l'},
        {'z', 'x', 'c', 'v', 'b', 'n', 'm'}
    };
    string Lk[] = {'q', 'w', 'e', 'r', 't', 'a', 's', 'd', 'f', 'g', 'z', 'x', 'c', 'v'};
    string Rk[] = {'y', 'u', 'i', 'o', 'p', 'h', 'j', 'k', 'l', 'b', 'n', 'm'};

    vector<pair <int, int>> v;

    cin >> SL >> SR;
    for(int i=0; i<3; i++){
        for(int j=0; j<10; j++){
            if(SL == keyboard[i][j])
                v.push_back(make_pair(i,j));
            if(SR == keyboard[i][j])
                v.push_back(make_pair(i,j))
        }
    }

    cin >> str;
    
    for(int i=0; i<Lk.size(); i++){

    }

}

처음에는 모든 키보드의 좌표를 저장하고 좌측 우측 키보드 값을 나누어 따로 저장하는 식으로 접근하였다

모든 키보드의 좌표를 돌면서 SL, SR의 좌표 값을 저장하고 처리하려고 했는데 풀면 풀수록 꼬이는 느낌이라... 나는 시간 내에 풀지 못하고  시간 내에 문제를 해결한 찬구의 코드 리뷰를 하였다.

 

 


 

 

#include <iostream>
#include <stdlib.h>

using namespace std;

int main() {
   // 왼손의 키보드
   char s_l[] = { 'q','w','e','r','t',
                    'a','s','d','f','g',
                    'z','x','c','v' };
   int s_l_p[][2] = { {0,0}, {0,1}, {0,2}, {0,3}, {0,4}, 
                        {1,0}, {1,1}, {1,2}, {1,3}, {1,4}, 
                        {2,0}, {2,1}, {2,2}, {2,3} };

   // 오른손의 키보드
   char s_r[] = { 'y','u','i','o','p',
                    'h','j','k','l',
                    'b','n','m', };
   int s_r_p[][2] = { {0,1}, {0,2}, {0,3}, {0,4}, {0,5},
                        {1,1}, {1,2}, {1,3}, {1,4},
                        {2,0}, {2,1}, {2,2} };

   char l, r;
   string str;
   int l_postion[2] = { 0 }; // 시작위치
   int r_postion[2] = { 0 };

   cin >> l >> r;
   cin >> str;

   // 오른손과 왼손의 시작 위치 저장
   for (int i = 0; i < 14; i++) {
      if (l == s_l[i]) {
         l_postion[0] = s_l_p[i][0];
         l_postion[1] = s_l_p[i][1];
      }
      if (i < 12) {
         if (r == s_r[i]) {
            r_postion[0] = s_r_p[i][0];
            r_postion[1] = s_r_p[i][1];
         }
      }
   }
   
   int time = 0;

   // 입력받은 문자열에 따라 이동하는 시간과 누르는 시간을 저장
   for (int i = 0; i < str.length(); i++) {
      for (int j = 0; j < 14; j++) {
         if (str[i] == s_l[j]) {
            time += abs(l_postion[0] - s_l_p[j][0]) + abs(l_postion[1] - s_l_p[j][1]) + 1;
            l_postion[0] = s_l_p[j][0];
            l_postion[1] = s_l_p[j][1];
         }
         if (j < 12) {
            if (str[i] == s_r[j]) {
               time += abs(r_postion[0] - s_r_p[j][0]) + abs(r_postion[1] - s_r_p[j][1]) + 1;
               r_postion[0] = s_r_p[j][0];
               r_postion[1] = s_r_p[j][1];
            }
         }
      }
   }

   cout << time << "\n";

   return 0;
}

친구의 풀이를 보면 애초에 키보드 문자 값과 좌표 값을 따로 저장하고

좌표의 시작 위치를 저장할 배열을 만들고 해당 문자가 들어오면 구동하는 방식으로 풀었었다

친구의 코드를 뜯어보면 그렇게 헤맬만한 문제는 아니였던 것 같은데 너무 꼬아서 접근을 했나 싶은 생각이 들었다...

다시 풀어보고 코드 추가 해봐야지

'스터디 > 알고리즘' 카테고리의 다른 글

[백준 5212] 지구 온난화  (0) 2022.01.13
[백준 2164] 카드2  (0) 2022.01.10
[백준 22864] 피로도  (0) 2022.01.10
[백준 2606] 바이러스  (0) 2022.01.10
[백준 1158] 요세푸스 문제  (0) 2022.01.06
profile

Devlog

@덩이

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그