[공부] 261001 - 문자열 다루기 2
Q2. 첫 표시 구간 교체
using System;
//원본 문장과 교체 내용을 한 줄씩 입력받
Console.Write("원본 문장: ");
string origin = Console.ReadLine();
Console.Write("교체 내용: ");
string change = Console.ReadLine();
//원본의 첫 [부터 그 뒤에 처음 나오는 ]까지를 대괄호를 포함해
//교체 내용으로 바꿈.
//완성된 구간이 없으면 원본을 그대로 둠
//대괄호는 중첩되지 않으며 두 입력 모두 빈 문자열일 수 있음.
//Remove와 Insert의 첫 인수는 시작 인덱스임
//Remove의 두 번째 인수는 지울 코드 단위의 개수이며,
//Insert의 두 번째 인수는 끼워 넣을 문자열임.
Console.WriteLine($"원본: [{origin}]");
string result = origin.Remove(3, 4);
Console.WriteLine($"결과: [{result.Insert(3, change)}]");
- 소요시간 - 20분
- AI 질문? - 함 (Remove, Insert 동작 방식과 원본이 안 바뀌는 이유에 대한 개념 질문. 코드 답은 안 받음)
어려웠던 이유?
- 문제 문장이 길어서 처음 봤을 때 막막하고 손이 안 감
Remove(3, 6)을 "3번부터 6번까지"로 착각함 (두 번째 인수는 끝 위치가 아니라 지울 개수)origin.Remove(3, 4);만 쓰고 결과를 변수에 안 받아서, 지운 게 반영되지 않음 (문자열 함수는 원본을 안 바꾸고 새 문자열을 돌려줌)
어떻게 풀었나?
- 예상 결과를 보고 "첫 번째 [철수]를 통째로 영희로 바꾸는 것"으로 문제를 단순하게 정리
- 칸 번호를 직접 세서
[는 3번,]는 6번임을 찾음 - 지울 개수 = 끝 - 시작 + 1 = 6 - 3 + 1 = 4
Remove(3, 4)의 결과를result에 받고, 그 위에Insert(3, 교체 내용)- 원본은 그대로 두고 result만 바꿔서 원본, 결과 둘 다 출력
남은것
- 3과 4를 직접 넣지 않고
IndexOf('['),IndexOf(']')로 찾게 바꾸기 [나]가 없으면 원본 그대로 두기
알게된점
Remove(시작, 개수),Substring(시작, 개수)둘 다 두 번째는 개수- 문자열 함수는 원본을 바꾸지 않으므로 결과를 꼭 변수에 받아야 함
- 막막한 문제는 예상 결과부터 보고 "무엇이 무엇으로 바뀌었나"를 먼저 말로 정리하면 단순해짐
Q3. 마지막 두 숫자 남기기
csharp
char[] chars = origin.ToCharArray();
int digitTotal = 0;
for (int i = 0; i < chars.Length; i++)
{
if (char.IsDigit(chars[i]))
{
digitTotal++;
}
}
int digitSeen = 0;
for (int i = 0; i < chars.Length; i++)
{
if (char.IsDigit(chars[i]))
{
digitSeen++;
if (digitSeen <= digitTotal - 2)
{
chars[i] = '*';
}
}
}
string result = new string(chars);
- 소요시간 - 약 30분 (밤 11시 이후)
- AI 질문? - 함 (IsDigit, ToCharArray 사용법, 숫자 순번으로 세는 방법)
어려웠던 이유?
- "숫자 중 마지막 두 개"를 처음엔 "문자열 앞 두 개, 뒤 두 개"로 읽음
- Replace로 숫자 전체를 한 번에 바꾸려 했는데, Replace는 정확히 그 글자만 바꿀 수 있음
- "문자열 끝에서 -2"로 멈추는 가설을 세웠는데, 끝 두 글자가 숫자가 아니면 틀림 (예: 12-34-AB)
- 밤 11시 넘으면 머리가 잘 안돌아감
어떻게 풀었나?
char.IsDigit으로 글자 하나가 숫자인지 판별ToCharArray로 문자열을 수정 가능한 배열로 바꿈- for 한 번으로 숫자 총 개수를 먼저 셈
- for 한 번 더 돌면서 몇 번째 숫자인지 세고, 마지막 두 개가 아니면
* new string(chars)로 다시 문자열로
남은 것
- 내일 이 코드 안 보고 빈 파일에서 다시 치기
- 출력 제목
코드:→결과:
알게된것
- 종류(숫자 전체)로 바꿀 땐 Replace가 아니라 IsDigit + 반복문
- 문자열은 직접 못 바꾸니까 배열로 바꿔서 고치고 다시 문자열로
- "글자 위치" 기준이랑 "숫자 순번" 기준은 다르다. 예시 하나만 넣지 말고 모양이 다른 입력으로도 확인하기
오늘 평가: F
- 20분 내로 풀지 못함
- AI한테 질문 횟수 4번 이상
- 완벽히 이해하지 못함
문제 템플릿
문제 번호
- 소요시간 - 20분
- AI 질문? - 함
어려웠던 이유?
어떻게 풀었나?
남은 것
알게된것



