[프로그래머스 / Lv.0] 문자열 밀기 (C#)

2023. 2. 17. 07:58·프로그래머스(Programmers)/C# 풀이

| 문제 설명 ❓

문자열 "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을 반환합니다.

| 풀이 🔥

⚠️ 한 번씩 읽어주세요 ⚠️

제 개인의 풀이 방법이며 틀린 풀이 방법 일수도, 더 나은 풀이법이 존재할 수도 있습니다!

전체 코드는 깃헙 링크 혹은 하단 접은 글을 펼쳐 확인가능하며, 복붙이 아닌 참고용 코드입니다

 

 

문자열 밀기 문제에 경우 문자열 내의 문자들이 오른쪽으로 한 칸씩 이동하는 느낌이라. 예전에 공부했던 쉬프르 연산자가 생각이 났었습니다. 하지만 좀 더 이해하기 쉬운 방법이 있을까 생각을 하던 중에 오른쪽으로 하나씩 미는 것이니 마지막 문자는 맨 앞으로 나머지 글자들은 그 뒤에 붙이는 생각이 떠올랐고, 그리고 예외 경우만 처리한다면 문제없이 동작할 것으로 예상하고 코드 작성을 진행하였습니다.

Ex) "ABCDEF" => "F" + "ABCDE" => "FABCDE"

 

 

[깃헙 / Github]

😻 댓글과 공감 한 번씩 감사드립니다 😻


| 전체 코드 🔎

더보기
using System;

public class Solution {
    public int solution(string A, string B) {
        int answer = 0;
        
        // ShiftString에서 반환된 값을 제출
        answer = ShiftString(A,B);
        
        return answer;
    }
    
    public int ShiftString(string A, string B)
    {
        // A, B 문자열이 일치 할경우 0 리턴.
        if(A == B)
            return 0;
        
        // 문자열의 길이 만큼 반복 수행 
        // Ex) "hello" => 5번 반복
        for(int i = 0; i < A.Length; i++)
        {
            // Ex) "hello"
            // a => A.Substring(A.Legnth-1,1) => "o"
            // b => A.Substring(0,A.Lenth - 1) => "hell"
            // a + b => "ohell"
            A = A.Substring(A.Length - 1, 1) + A.Substring(0, A.Length - 1);
            
            // 연산 결과가 일치 한다면 i+1를 리턴
            if(A == B)
            {
                return i+1;
            }
        }
        
        // 문자열의 길이 만큼 반복 하여도 일치 하지 않는 경우 -1 리턴
        return -1;
    } 
}
저작자표시 변경금지 (새창열림)
'프로그래머스(Programmers)/C# 풀이' 카테고리의 다른 글
  • [프로그래머스 / Lv.0] 7의 개수 (C#)
  • [프로그래머스 / Lv.0] 잘라서 배열로 저장하기 (C#)
  • [프로그래머스 / Lv.0] 종이 자르기 (C#)
  • [프로그래머스 / Lv.0] 연속된 수의 합 (C#)
프로포폴
프로포폴
Unity 클라이언트 개발자가 운영 하는 개발 블로그 입니다
  • 프로포폴
    약파는개발자
    프로포폴
  • 전체
    오늘
    어제
    • 분류 전체보기 (67)
      • 유니티 (21)
        • 공부 (0)
        • 튜토리얼 (0)
        • 에셋 (3)
        • 문제 해결 (2)
        • 작업 (16)
      • 언리얼(Unreal) (1)
        • 문제 해결 (1)
      • 백준 (20)
        • 브론즈5 (Bronze V) (20)
      • 프로그래머스(Programmers) (23)
        • C# 풀이 (23)
      • C# (0)
        • 팁 (Tip) (0)
      • 컴퓨터 과학(CS) (2)
        • 알고리즘 (1)
        • 자료구조 (1)
  • 블로그 메뉴

    • 홈
    • 글쓰기
    • 태그
    • 유니티
    • 알고리즘
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    유니티
    Bronze V
    c#
    CS
    SHA
    projecta
    C++
    프로그래머스_Lv.0
    탐색(Search)
    프로그래머스
    컴퓨터과학
    브론즈5
    픽셀리마인드
    baekjoon
    알고리즘
    백준
    작업
    Unity
    개발일지
    프로그래머스_C#
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
프로포폴
[프로그래머스 / Lv.0] 문자열 밀기 (C#)
상단으로

티스토리툴바