240409-TIL

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