https://school.programmers.co.kr/learn/courses/30/lessons/120921
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
#include <string>
#include <vector>
using namespace std;
int solution(string A, string B) {
int answer = 0;
for(answer=0;;answer++)
{
if(answer>A.length())return -1;
if(A==B)
break;
char c = A[A.length()-1];
for(int j=A.length()-1;j>=1;j--)
A[j]=A[j-1];
A[0]=c;
}
return answer;
}
설명
문자열을 1칸씩 오른쪽으로 밀며 A와 B가 같은지 확인하고 몇번을 밀어야하는지를 리턴하는 문제이다.
for문에서 예외로 민 횟수가 문자열의 길이를 넘어서면 두 문자열은 같아질 수 없으므로 -1을 리턴한다.
그리고 A와 B가 같은지 체크하고 다르다면 오른쪽으로 A를 민다.
char c = A[A.length()-1];
for(int j=A.length()-1;j>=1;j--)
A[j]=A[j-1];
A[0]=c;
A 문자열을 오른쪽으로 미는 코드이다.
가장 오른쪽 문자 즉, 마지막 문자는 사라지기 때문에 c에 저장해놓는다.
그리고 A[0] 은 A[1] 에 A[1] 은 A[2] 에 넣으면 되는데 이를 마지막부터 해야 문자가 사라지는 것을 방지할 수 있다.
ex) 0부터 시작하면 A[0] = A[1] 을 하는 순간 A[1] 데이터가 지워진다.
따라서 A[2] = A[1] , A[1] = A[0] 순으로 해야한다.
마지막에 A[0] 에 저장해놓았던 마지막 문자를 대입한다.
'알고리즘 > 프로그래머스 1단계' 카테고리의 다른 글
프로그래머스 - 최빈값 구하기 - C++ (0) | 2023.09.07 |
---|---|
프로그래머스 - 종이 자르기 - C++ (0) | 2023.09.06 |
프로그래머스 - 캐릭터의 좌표 - C++ (0) | 2023.09.04 |
프로그래머스 - 모스부호(1) - C++ (0) | 2023.09.03 |
프로그래머스 - 진료순서 정하기 - C++ (0) | 2023.09.02 |