[프로그래머스/C++ 문제 풀이] Lv. 0 - 문자열 밀기

2024. 7. 2. 12:32·코딩테스트/프로그래머스 (Lv. 0)
목차
  1. 문제 설명
  2. 제한 사항
  3. 입출력 예
  4. 문제 풀이
  5. 정답 코드
728x90
반응형

문제 설명

문자열 "hello"에서 각 문자를 오른쪽으로 한 칸씩 밀고 마지막 문자는 맨 앞으로 이동시키면 "ohell"이 됩니다. 이것을 문자열을 민다고 정의한다면 문자열 A와 B가 매개변수로 주어질 때, A를 밀어서 B가 될 수 있다면 밀어야 하는 최소 횟수를 return하고 밀어서 B가 될 수 없으면 -1을 return 하도록 solution 함수를 완성해보세요.

제한 사항

  • 0 < A의 길이 = B의 길이 < 100
  • A, B는 알파벳 소문자로 이루어져 있습니다.

입출력 예

A B result
"hello" "ohell" 1
"apple" "elppa" -1
"atat" "tata" 1
"abc" "abc" 0

 

입출력 예 #1

  • "hello"를 오른쪽으로 한 칸 밀면 "ohell"가 됩니다.

입출력 예 #2

  • "apple"은 몇 번을 밀어도 "elppa"가 될 수 없습니다.

입출력 예 #3

  • "atat"는 오른쪽으로 한 칸, 세 칸을 밀면 "tata"가 되므로 최소 횟수인 1을 반환합니다.

입출력 예 #4

  • "abc"는 밀지 않아도 "abc"이므로 0을 반환합니다.

문제 풀이

이번 문제는 약간의 아이디어가 있다면 간편하게, 아니라면 조금은 무식하게 풀이가 가능한 문자열 관련 문제였습니다.

 

저는 조금 무식한 방식으로 문자열의 맨 뒤 문자를 맨 앞으로 옮겨주는 방식을 통해 풀게 되었지만...

간단히 이야기하자면 결국 문자열 A를 회전시켜 B를 만들어야 하는 문제이므로 다음과 같이 생각할 수 있습니다.

 

[ B를 2번 이어서 붙인 경우 해당 문자열 안에 문자열 A가 존재해야만 밀어서 만들 수 있는 문자열 ]

 

즉, "BCA" 문자열을 밀어서 "ABC" 문자열을 만들어야 한다면

[ ABCABC ] 라는 문자열에서 "BCA" 문자열이 존재한다면 가능한 경우입니다.

 

심지어 위 문자열에서 BCA의 첫 인덱스는 1로, "BCA" 문자열을 우측으로 1회 밀면 "ABC" 문자열이 만들어지게 됩니다.

 

다른 예시로 "Hello" 문자열로 "lloHe" 문자열을 만들어보도록 하겠습니다.

위와 동일하게 "lloHe" 문자열을 2번 이어 붙인다면 [ lloHelloHe ] 문자열이 되며, 첫 'H'는 3번 인덱스에 위치해 있는 것을 확인할 수 있습니다.

 

즉, Hello -> oHell(1회) -> loHel(2회) -> lloHe(3회) 와 결과가 동일하며 이를 활용해 find() 함수로 다음과 같이 간단히 풀이가 가능합니다.

더보기
#include <string>

using namespace std;

int solution(string A, string B)
{
    B += B;
    return B.find(A);
}

다음으로는 제가 무식하게 문자열을 직접 수정하며 풀이한 결과물입니다..

 

정답 코드

더보기

풀이 시간 : 20m 13s

1회 오답 이유 : 우측 or 좌측으로 문자열을 밀어 최소 횟수를 구하는 것으로 생각하여 오답..

#include <string>
#include <vector>

using namespace std;

int solution(string A, string B) {
    int answer = 0;

    // 문자열이 같다면 굳이 실행해보지 않고 종료합니다.
    if (A == B)
    {
        return answer;
    }

    string tempStr = A;

    // 카운트 저장용 변수
    int rCount = 0;

    // right 방향으로 밀기
    for (int i = 0; i < tempStr.length(); i++)
    {
        // 맨 뒤에 위치한 문자를 저장합니다.
        char tmp = tempStr[tempStr.length() - 1];
        // 맨 뒤에 위치한 문자를 제거합니다.
        tempStr.erase(tempStr.length() - 1);
        // 맨 앞에 해당 문자를 추가합니다.
        tempStr = tmp + tempStr;

        // 만약 tempStr과 B가 동일한 문자열이라면?
        if (tempStr == B)
        {
            // 해당 인덱스 + 1을 저장합니다.
            rCount = i + 1;
            break;
        }
    }

    // 결과 출력용
    if (rCount == 0)
    {
        answer = -1;
    }
    else
    {
        answer = rCount;
    }

    return answer;
}

 

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'코딩테스트 > 프로그래머스 (Lv. 0)' 카테고리의 다른 글

[프로그래머스/C++ 문제 풀이] Lv. 0 - 특이한 정렬  (0) 2024.07.02
[프로그래머스/C++ 문제 풀이] Lv. 0 - [PCCE 기출문제] 6번 / 가채점  (0) 2024.07.02
[프로그래머스/C++ 문제 풀이] Lv. 0 - 다항식 더하기  (0) 2024.07.01
[프로그래머스/C++ 문제 풀이] Lv. 0 - 배열 만들기 2  (0) 2024.07.01
[프로그래머스/C++ 문제 풀이] Lv. 0 - 코드 처리하기  (0) 2024.07.01
  1. 문제 설명
  2. 제한 사항
  3. 입출력 예
  4. 문제 풀이
  5. 정답 코드
'코딩테스트/프로그래머스 (Lv. 0)' 카테고리의 다른 글
  • [프로그래머스/C++ 문제 풀이] Lv. 0 - 특이한 정렬
  • [프로그래머스/C++ 문제 풀이] Lv. 0 - [PCCE 기출문제] 6번 / 가채점
  • [프로그래머스/C++ 문제 풀이] Lv. 0 - 다항식 더하기
  • [프로그래머스/C++ 문제 풀이] Lv. 0 - 배열 만들기 2
리태s
리태s
게임 클라이언트 프로그래머 직무를 준비하며 공부한 내용을 정리한 블로그입니다.
    반응형
    250x250
  • 리태s
    LeeTaes 공부노트
    리태s
  • 전체
    오늘
    어제
    • Home (165)
      • 프로젝트 (20)
        • Isaac 3D (5)
        • TimelessAdventure (13)
        • FruitsPuzzle (2)
      • Game Programming (25)
        • C# (8)
        • Unity Engine (6)
        • Unreal Engine (8)
        • UE_Multiplayer (3)
      • 코딩테스트 (111)
        • 프로그래머스 (Lv. 0) (27)
        • 프로그래머스 (Lv. 1) (31)
        • 프로그래머스 (Lv. 2) (21)
        • 백준 (Study) (29)
        • 알고리즘 (3)
      • CS지식 (7)
        • 운영체제 (7)
      • 일상 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    2018 kakao
    unity
    delegate
    sesac
    2019 kakao
    dataasset
    project t.a develop
    후기
    Algorithm
    프로젝트
    구현
    C++
    Unreal Engine
    fruitspuzzle
    timelessadventure
    프로그래머스
    Summer/Winter Coding
    unrealengine
    백준
    청년취업사관학교
    tsoftobjectptr
    2022 kakao
    코딩테스트
    CS지식
    fsoftobjectpath
    c#
    프로세스
    ai controller
    issac3d
    pcce 기출문제
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
리태s
[프로그래머스/C++ 문제 풀이] Lv. 0 - 문자열 밀기

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.