일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- unity3dservival
- 유니티
- 스파르타
- c#문제
- unity공부
- 유니티3dui
- c#기초문법
- 유니티공부
- Unity
- 유니티상호작용
- C#문법
- c#기본문법
- 스파르타코딩클럽
- unity3d
- 오블완
- unity게임
- 티스토리챌린지
- c#
- c# 백준
- c#코딩기초트레이닝
- 시샵
- unity3d게임만들기
- 시샵문법
- 유니티서바이벌게임만들기
- c# c#프로그래머스
- 유니티게임만들기
- unity게임만들기
- Console.WriteLine
- c#프로그래머스기초문법
- c#코테
- Today
- Total
나 개발자 진짜 되냐?
C#/기초트레이닝/ 10. 문자열 겹쳐쓰기 본문
ㅇㅅㅇ..
나름 또 10번이라그런지..
문제설명이 많아졌다.
이상하게 문제설명이 많아지니 두렵다
어려울까봐..
근데 진짜 어렵다 ㅋㅋㅋㅋ
문제는 이러하다.
mystring 을 출력하다가
정수 s가 적힌곳에 있는 인덱스부터
overwrite_string 를 출력하라고 한다.
흠..
음...
40분동안
for문과 if문을 엮어서 열심히 푸는데
이건 안될거같다는 생각과함께
머리에 뭐하나가 스쳤다.
아...문자열을..변경할수있는 친구가 있었지..
뭐더라..
하며 결국 나는 답을 보았다.
이 친구를 참조하면 쉽게 문제를 풀 수 있다.
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
'코테를 준비해봐요! > C#' 카테고리의 다른 글
C#/기초트레이닝/ 12. 문자 리스트를 문자열로 변환하기 ( Join ) (4) | 2024.10.16 |
---|---|
C#/기초트레이닝/ 11. 문자열 섞기 (3) | 2024.10.16 |
C#/기초트레이닝/ 9. 홀짝 구분하기 (0) | 2024.10.08 |
C#/기초트레이닝/ 8. 문자열 돌리기 (1) | 2024.10.07 |
C#/기초트레이닝/ 7. 문자열 붙여서 출력하기 (0) | 2024.10.07 |