관리 메뉴

cococo-coding

[C++ 풀이] 5218번. 알파벳 거 본문

[BOJ] 코드 모음/C++_learning 문제집

[C++ 풀이] 5218번. 알파벳 거

_dani 2024. 1. 24. 17:17


문제 분석

두 문자열을 입력받고, 각 자리의 문자끼리 위치를 계산해 출력하는 문제이다.

 

입력받은 문자열이 x, y순이라면

1) x가 y보다 작거나 같은 경우는 y-x로 

2) x가 y보다 큰 경우는 (y+26)-x로 거리를 계산한다.

 

이때 아스키코드로의 알파벳은 A=65, B=66...Z=90 이고

우리가 문제에서 사용할 알파벳은 A=1, B=2, ... Z=26이므로 이 부분도 고려해준다. 

 

알고리즘 설계

우선 처음 입력받는 문자열은 s1, 뒤에 입력받는 문자열은 s2로 지정한다.

s1과 s2의 문자열 길이는 동일하므로, s1의 문자열 길이만큼을 for문으로 돌려준다.

 

각각 문자에서 64씩을 빼주어 아스키코드->우리가 실 사용할 값으로 변경해준다.

 

변경한 값으로 s1(=x)가 작거나 같은경우s1이 더 큰 경우로 나누어 거리를 계산해 출력해준다. 

출력형식인 "Distances: "와 개행문자(\n)는 적절한 곳에 넣어준다. 


코드

#include <iostream>
using namespace std;
/*
    1. 테스트케이스 수 입력받기
    2. 각 테스트케이스 입력받기
    3. 각 케이스별 거리 계산
    4. 계산 출력
*/

int main() {
    //1
    int n;
    cin >> n;

    //2
    string s1, s2;
    while (n--) {
        cin >> s1 >> s2;
              
        cout << "Distances: ";
        for (int i = 0; i < s1.length(); i++) {
            s1[i] -= 64;
            s2[i] -= 64;
            if (s1[i] <= s2[i])
                cout << s2[i] - s1[i] << ' ';
            else
                cout << (s2[i] + 26) - s1[i] << ' ';
        }
        cout << '\n';
    }

    return 0;
}