나 개발자 진짜 되냐?

C#/기초트레이닝/ 10. 문자열 겹쳐쓰기 본문

코테를 준비해봐요!/C#

C#/기초트레이닝/ 10. 문자열 겹쳐쓰기

Snow Rabbit 2024. 10. 8. 20:43

 

 

ㅇㅅㅇ..

나름 또 10번이라그런지..

문제설명이 많아졌다.

 

이상하게 문제설명이 많아지니 두렵다

어려울까봐..

 

근데 진짜 어렵다 ㅋㅋㅋㅋ


 

문제는 이러하다.

 

mystring 을 출력하다가

정수 s가 적힌곳에 있는 인덱스부터

overwrite_string 를 출력하라고 한다.

 

흠..

음...

 

40분동안

 for문과 if문을 엮어서 열심히 푸는데

이건 안될거같다는 생각과함께

머리에 뭐하나가 스쳤다.

 

아...문자열을..변경할수있는 친구가 있었지..

 

뭐더라..

 

 

하며 결국 나는 답을 보았다.

 

https://qua28.tistory.com/163

 

[ C# 기본 문법 26 ] StringBuilder 너.. 좋은 친구구나?

오늘은!코테하며 알게 된 친구에 대해 이야기해볼 예정이다.StringBuilder이다.    이 친구는 누구냐! 문자열 string은 원래 변경이 불가능 한 친구이다.그래서 변경을 해주려면 또 string로 받아야

qua28.tistory.com

 

이 친구를 참조하면 쉽게 문제를 풀 수 있다.

 

for문과 if문에서 내가 실수했던 부분은 바로 여기였다.

 

i == s

2번째까지 오면 값을 오버라이트를 넣어주긴 했지만

이렇게 해주면 

 

만약 마이스트링의 값이 더 길경우

마이스트링의 뒷부분도 잘리는 상황이 생겼다.

 

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

 ❗ 마우스로 해주신 정성을 받아 고대로 넣었습니다.❗

 

이 식만 봐도 

추가적인 값을 그대로 넣어준다면

원래식 9번도 잘리기 마련이다.

 

 

마침 문제에서 중요한 힌트도 주었다.

 

오버라이트 길이는 무조건

마이스트링보다 작다는것을..

 

그래서

if문의 조건을 바꾸어 주어야한다.

 

   if (i >= s && i < overwrite_string.Length + s )

 

그림을 다시보면 변경해야하는 부분은

s부터 오버라이트 길이만큼이다.

그렇기 때문에

 

i는 s보다 크고

그리고

i는 오버라이트 길이 + s보다는 짧아야한다.

 

아니..

i가 s보다 큰거 오케이

근데

밑에 말은 무슨말이죠?

 

우리는 지금 출력해야하는 부분이

my의 일부분에서부터 over의 전체이다

 

추가적으로 my의 일부분이 더 해질수도 있는데

 

my의 일부분에서부터 over의 전체길이보다

길어지게 if문을 돌리면

 my의 추가적인 문자열을 못 출력할수도있다.

 

즉,

if 문에 뜻은

HelloWorl까지 출력하기위한 과정이었던것이다!!

 

후 이해가 갔을까?

 

그 래 서

 

그 밑에 answer 값도

answer += overwrite_string[i-s];

써주면서 i-s를 해주어야한다.

왜냐면 이미 앞에

my친구가 있기때문에

my가 이미 인덱스 몇개에 들어갔으니..

나는 그 다음부터 넣어야하지않겠는가!!

 

그래서 빼주는 것이다.

 

쓰면서도 이게 이해가 된다면

천재가 아닐까 싶은 생각이 든다.

 

 

그림을 보며..

한번씩 내가 적어두었던 글을 읽어보도록 하자

 

⭕ 정답 

 

답은 두개이다.

먼저 StringBuilder을 쓴 식

 

remove를 통해서 싸악 자르고

overwrite 을 가져와서 붙인다.

 

그리고 ToString로 합치면 끝

 

using System;
using System.Text;

public class Solution {
    public string solution(string my_string, string overwrite_string, int s) {
        string answer = "";
        StringBuilder myStringBuilder = new StringBuilder(my_string);
        
        myStringBuilder.Remove(s,overwrite_string.Length); // 잘림
        myStringBuilder.Insert(s,overwrite_string); //삽입
            
        answer = myStringBuilder.ToString(); // 문자열 출력을 위해 변환
            
        return answer;
    }
}

 

 

다음 내가 틀렸던

for문과 if문 쓰는 방법이다.

 

using System;

public class Solution {
    public string solution(string my_string, string overwrite_string, int s) {
        string answer = "";
        for (int i = 0; i < my_string.Length; i++)
         {
             if (i >= s && i < overwrite_string.Length + s )
             {
                 answer += overwrite_string[i-s];
             }
            else { answer += my_string[i]; }
         }
        return answer;
    }
}

 

 

 

 

아..

당분간 풀기 싫다

이거 3시간 풀었다고하면 믿습니까?

https://school.programmers.co.kr/learn/courses/30/lessons/181943

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr