2024. 4. 9. 20:01ㆍ내일배움캠프
4월 9일
오늘은 오랜만에 쉽게 풀수있는 알고리즘 문제를 접해서
너무 반가웠다
오늘 풀어본 문제는
문자열 나누기
문제 설명은 이렇다
문제 설명을 듣고 도대체 무슨 규칙인지 잘 이해가 가지 않았지만 이럴때를 위해 우리는 입출력 예를
자세히 보아야 한다
설명과 함께 입출력 예를 보자 첫글자를 x라고 한다고 한다
입출력 예#1 에선 x는 = b 그리고 왼쪽부터 오른쪽으로 글자를 읽어나간다고 했으니
x와 같은 글자인 banana의 첫글자인 b가 있으니 같은숫자 한번나왔고 두번쩨 글자를 읽었더니 다른글자 a가 나왔다
그러면 ba까지를 뚝때서 보관해두고 다시 남은 nana에서 x를 지정해준다 x = n 왼쪽부터 또 읽어간다
nana의 첫글자는 x와 같은 n 같은숫자 한번나왔다 그 다음글자 a는 x와 같지 않으니 다른글자 한번 나왔으니깐
na까지를 또 뚝 때서 보관해두자 나머지 na에서 x를 또 지정해주자 x = n 왼쪽부터 읽어가니
na에서 x와 같은글자 n이한번 다른글자 한번이 나와서 ba - na - na 분해한 문자열의 개수는 3개가 된다
입출력 예를 통해 문제를 이해했으니 이제 직접 문제를 풀어보자
별 다를꺼 없는 초기 솔루션의 상태이다
요렇게 내가 문자열을 얼마나 나누었나 계산하기 위한 변수들을 만들어준다
첫 글자를 집어넣을 문자형 변수 start 같을때 1씩 증가시켜줄 same 다를때 1씩 증가시켜줄 diff
당연히 s의 길이만큼 반복문을 돌아주면서 비교해주자
반복문 안의 조건문은 이렇다 i == 0이라면 s문자열의 시작이라는 것이니깐 start에 s[i]를 넣어준다.
입출력예를 보면서 이해했던것과 같이 처음 글자와 x글자는 같기때문에 same을 바로 1 증가시켜준채로 시작하자
그다음 반복문에는 i가 1이되면서 첫 if문은 건너뛰고 그 다음에 있는 else if와 else문만을 검사하게된다
start에 넣어준 값이 s[i]와 같을때 same을 다를때 diff를 1씩 올려주도록 만들어 주었다
중요한건 그 다음 조건문이다
same과 diff가 같고 아직 i가 s의 길이 -1보다 작다면 처음 글자를 s[i+1]로 바꿔주고
same을 0 diff를 0으로 만들어주어 새로 지정된 첫글자와 다른글자를 비교하기위한 준비를 해준다
그리고 이때 문자열을 나눴기 때문에 answer을 1증가시켜주도록하자
만약 i가 s.Length -1일때는 더 이상 읽을 글자가 없기 때문에 answer을 1올려주고 반복문이 끝나게된다.
그림으로 함께보자
첫 조건문을 통해 b를 첫글자 start에 넣어주고 same을 1증가 두번째 a를 읽었을때 b == a가 다르기때문에 diff를 1증가 시켜준다
두번째 코드일때 앞서 ba까지 읽으면서 same과 diff가 같아졌기 때문에 이제 ba는 뚝 때면서 answer를 1증가시켜주고
n을 첫글짜로 만들어줌과 동시에 same과 diff를 n을 기준으로 비교하기위해 0으로 초기화 시켜준다
만약 n의 위치가 banana의 문자열 길이 6-1인 5보다 컸다면 다음 글자는 없기 때문에 바로 answer을 올려주도록하자
걸린 시간도 크게 튀는 경우 없이 잘 푼거 같다
오랜만에 쉬운 문제가 나와서 기분이 좋다
4월9일 TIL은 여기서 마치도록 하겠다
'내일배움캠프' 카테고리의 다른 글
240412-TIL (0) | 2024.04.12 |
---|---|
240411-TIL (0) | 2024.04.11 |
240404-TIL (0) | 2024.04.04 |
240403-TIL (0) | 2024.04.03 |
240402-TIL (0) | 2024.04.02 |