https://www.acmicpc.net/problem/11655
⏰ 53m
#include <bits/stdc++.h>
using namespace std;
string input;
string output;
string alp = "abcdefghijklmnopqrstuvwxyz";
string ALP = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int main(){
getline(cin, input);
output = input;
for (int i = 0; i < input.length(); i++) {
for (int j = 0; j < 26; j++) {
if (input[i] == alp[j]) {
if (j < 13)
output[i] = alp[j+13];
else
output[i] = alp[j-13];
}
else if (input[i] == ALP[j]) {
if (j < 13)
output[i] = ALP[j+13];
else
output[i] = ALP[j-13];
}
}
}
cout << output;
return 0;
}
시간이 너무 오래 걸렸다. ㅠㅠ 그래도 어떻게 풀었다.
output
변수 만들기 전, 코드를 잘 적었다고 생각했는데 자꾸 결과가 틀리게 나와서 보니, input
변수 위에다 계속 덮어쓰며 변경을 해서 그런 것 같다. 근데 왜지...? 어차피 for 문에서 순차적으로 읽으면서 바꾸는 것이니까 괜찮지 않을까?
ouput
변수 만들어서 input
을 복사 후에 했더니, 바른 결과가 나왔다.
➡️ input[i] == alp[j]
일때 input[i]
의 값이 alp[j+13]
으로 바뀐 다음에도 게속 for문이 돌아, j = j+13
의 경우에 또 바뀔 수 있습니다.
input의 글자가 b일 경우, j = 1일 때 o로 바꼈다가 j = 14일 때 다시 b로 바뀐다.
그리고, 알파벳을 문자열로 쭉 나열 후 하는 것이 가장 효율적인지 궁금하다.
대문자 A : 아스키코드 65
소문자 a : 아스키코드 97
➡️ 이것만 외워라!
#include <bits/stdc++.h>
using namespace std;
int main() {
getline(cin, s);
for (int i = 0; i < s.size(); i++) {
//대문자
if (s[i] >= 65 && s[i] < 97) {
if (s[i] + 13 > 90)
s[i] = s[i] + 13 - 26;
else s[i[ = s[i] + 13;
} else if (s[i] >= 97 && s[i] <= 122) {
if (s[i] + 13 > 122) s[i] = s[i] + 13 - 26;
else s[i] = s[i] + 13;
}
cout << s[i];
}
return 0;
}