728x90
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이
이 문제는 주어진 조건에 따라 문자열을 다시 만들어주는 문제이다. 두 문자열 s, skip과 자연수 index가 주어질 때, 조건은 다음과 같다.
- 문자열 s의 각 알파벳을 index만큼 뒤의 알파벳으로 바꿔준다.
- index만큼의 뒤의 알파벳이 z를 넘어갈 경우 다시 a로 돌아간다.
- skip에 있는 알파벳은 제외하고 건너뛴다.
이 조건을 보았을 때, 먼저 전체 소문자 알파벳 문자열을 만들어준 뒤, skip에 포함된 알파벳들을 제거해서 우리가 사용할 알파벳 배열을 만들어주어야 한다.
alpha = "abcdefghijklmnopqrstuvwxyz", skip = "wbpd" 라면, skip이 제거된 alpha는 다음과 같다.
alpha = "acefghijklmnoqrstuvxyz"
이 문자열을 통해, 우리가 s를 index에 맞게 변경해주면 된다. s의 각각의 알파벳은 find 함수를 통해 alpha 문자열에서의 인덱스를 찾을 수 있고, 여기에 주어진 index를 더해준 새로운 인덱스를 통해 alpha 문자열에서 문자를 가지고 오면 된다. alpha 배열보다 새로운 인덱스가 클 경우, alpha 길이만큼 빼주면서 alpha 문자열의 범위 안에 포함되어야 한다.
정답 코드
C++
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
string solution(string s, string skip, int index) {
string answer = "";
string alpha = "abcdefghijklmnopqrstuvwxyz";
for (int i = 0; i < skip.length(); i++) alpha.erase(find(alpha.begin(), alpha.end(), skip[i]));
for (int i = 0; i < s.length(); i++) {
int change = alpha.find(s[i]) + index;
while (change >= alpha.length()) change -= alpha.length();
answer += alpha[change];
}
return answer;
}
python
def solution(s, skip, index):
answer = ''
alpha = 'abcdefghijklmnopqrstuvwxyz'
for sk in skip :
alpha = alpha.replace(sk, '')
for c in s :
change = alpha.find(c) + index
while change >= len(alpha) :
change -= len(alpha)
answer += alpha[change]
return answer
728x90
'Algorithm > PS' 카테고리의 다른 글
[C++, python] 프로그래머스 - 숫자의 표현 (0) | 2023.02.27 |
---|---|
[C++, python] 프로그래머스 - 최솟값 만들기 (0) | 2023.02.27 |
[C++, python] 프로그래머스 - 햄버거 만들기 (0) | 2023.02.26 |
[C++, python] 프로그래머스 - 성격 유형 검사하기 (1) | 2023.02.26 |
[C++, python] 프로그래머스 - 카드 뭉치 (0) | 2023.02.26 |