https://school.programmers.co.kr/learn/courses/30/lessons/12926
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
#include <string>
#include <vector>
using namespace std;
string solution(string s, int n) {
for(int i=0;i<s.length();i++)
{
if(s[i]!=' ')
{
int al = (int)s[i];
// 소문자이면
if(al >= 97)
{
al = (al - 97 + n) % 26;
s[i] = 'a'+al;
}
else
{
al = (al - 65 + n) % 26;
s[i] = 'A' + al;
}
}
}
return s;
}
설명
이 문제는 문자열에 있는 알파벳에서 사전적으로 n만큼 뒤에 있는 알파벳으로 바꾼 알파벳을 만드는 것이다.
따라서 for문을 통해 공백이 아닌 문자일 때, 소문자인가 대문자인가에 따라 연산을 해준다.
int al = (int)s[i];
이 코드는 알파벳을 정수형으로 표현하겠다는 뜻이다. 즉 아스키코드로 바뀌는 것이다.
그리고 이 al이 97 이상이면 소문자라는 뜻이다.
al = (al - 97 + n) % 26;
s[i] = 'a'+al;
위 코드는 al-97을 통해 몇번째 알파벳인지를 파악하고 +n을 함으로써 원하는 결과의 알파벳의 순서를 파악한다.
그리고 알파벳의 개수인 26을 나머지연산하여 z를 넘어가면 다시 a로 오게끔 해준다.
그리고 몇번째인지를 파악했으니 소문자 a에 +al을하여 a에서 원하는 만큼 이동시켜준다.
al = (al - 65 + n) % 26;
s[i] = 'A' + al;
대문자도 동일한 연산을 거치는데 대문자 'A' 는 아스키코드가 65이므로 65를 뺀다.
'알고리즘 > 프로그래머스 1단계' 카테고리의 다른 글
프로그래머스 - K번째수 - C++ (0) | 2023.10.20 |
---|---|
프로그래머스 - 약수의 개수와 덧셈 - C++ (0) | 2023.10.19 |
프로그래머스 - 이상한 문자 만들기 - C++ (0) | 2023.10.17 |
프로그래머스 - 문자열 내림차순 - C++ (0) | 2023.10.15 |
프로그래머스 - 같은 숫자는 싫어 - C++ (0) | 2023.10.14 |