오늘은 프로그래머스 쉬운문제부터 좀 풀어보는 시간을 갖았습니다
0단계부터 최대한풀어버리려구요
일단 쉬운문제부터 잡았습니다.
대충 banana에서 ana라는 문자가 몇번이나 있는지를 찾는 문제인데
정규식으로 찾으면 되겠다 싶더군요
그래서 정규식으로 짜서 match로 돌려봤습니다만.
한번만 찾고 끝이납니다.
플래그를 넣어줘도
뒤에 bana여기에서 한번 찾고 뒤에 존재하는 값은
na라는 문자만 남기때문에 더이상 찾을 수 가 없게되는데요
그래서 고민하다가
재귀함수로 ana로 시작하는 문자열의 인덱스 값을 찾아서
인덱스값 +1 이후로 문자열을 자른뒤 다시 검사하고 ..
이 과정을 반복해서 찾는 형식으로 고민했습니다
탈출 조건 같은경우에는 문자열에 match를 했을때 아무 값이 안뜰때 탈출하도록 해서
재귀함수를 만든후에
재귀함수를 돌려서 결과를 배열에 담아 리턴하도록 구성했네요
아마 재귀함수에 익숙하지 않았다면 어떻게 풀까 고민을 더 했어야 할거같네요
반복문으로 처리도 가능할것 같은데
일단 떠오르는 아이디어는 이 방식이라.. 이거로 처리했습니다.
쉬운 문제라서 몇문제 더 풀어야겠습니다.
이건 문자열에서 가장 긴걸 찾는거네요
머리속으로 생각한것은
일단
indexOf랑 lastindexOf를 비교해서 더 높은값으로 substring(0, 높은값) 결과 내보내면 완료할듯함
두가지 값으로 인덱스를 계산하고 substring메서드가
받아오는 인자가 앞에는 시작점, 뒤에는 종료점인데
문제에서 보면
dE를 찾으라고 한다
dE는 두글자이니 숫자로 표시하면 2가 될것이고
순서로 보면
A b C d E F G
0 1 2 3 4 5 6
3번째에서 시작해서 4번째에서 끝나게된다
내 생각에는
indexof로 순서를 찾게되면 3이라는 숫자가 나올것이고
총 2개의 숫자이니
substring으로 (0, 여기에 값으로 pat로 들어오는 문자열의 숫자 -1을 해주면 될것같다
왜 -1이냐면
substring으로 0에서 인덱스 4번까지 긁어와야 해서인데..
반복문을 써서 chartAt으로 찍어도 될것같지만..
그냥 간단하게 생각해서 처리했는데
오류가 난다
substring이 내가 생각하는 방식으로 정답을 표현해주지 않아서인데
결과값을 직접 찍어보니 이해했다.
사용법에 대해서 한번더 읽어봤다.
내가 원하는 인덱스 값의 바로 이전까지를 반환한다하니
-1을 빼면 되겠다.
간단하게 통과했다
역시 재밌긴 하다
이번에도 재귀함수로 풀면 쉽게 풀릴만한 내용의 문제가 나왔다.
재귀함수를 평소에 쓸일이 별로 없었는데
이렇게 문제가 나와주니 좋긴 한듯하다.
일단 jsbin사이트에서 테스트 해가면서 풀었는데
재쉬를 돌릴때
탈출조건을 생각했는데
문자열 길이가 되면 탈출되는게 나을것 같아서
idx를 횟수로 받아서 처리하도록 구성했다.
idx가 0일때랑 0이 아닐때 계산을 달리 해야해서
조건문을 분리해서 계산했고
jsbin에서 테스트해보니 잘되서
적용했더니 통과
재귀함수가 무조건 좋은건 아니지만 (성능적으로 봤을때)
확실히 언제 끝날지 모르는 미지의 값을 주고 풀라고하면 재귀함수가 좋은 선택지중 하나인듯 하다.
나름 간단한 문제인데
방법이 다양해서 어떻게 하는게 효율적인지를 고민했다.
일단 정렬을 시킨뒤
오름차순이라면 앞부분을 shift()를 이용해서 잘라도 되고
.. 먼저 정렬부터 하는게 나을것 같아서
정렬하고 반복문으로 앞의 5자리 숫자를 잘라낸뒤
결과를 내보내면 될듯 하여
정렬하고 앞의자리 자르는걸로 처리했다
근데 곰곰히 생각해보면 배열도 잘라내는게 있을것같은데
찾아보니 있긴 하다
배열 메서드나 문자열 메서드는 많이 알고있는게 좋긴 한데..
뭐 방법이 여러가지이니..
또다른 방법은 정렬할때 내림차순으로 정렬후 length -5 이런식으로 길이를 줄여서
다시 오름차순으로 정렬하는것도 떠올랐는데
너무 좋은방법은 아닌듯 하여 패스..
다음문제는 앞에서 풀었던 문제랑 거의 동일한데
조금 다른점은 앞에서 5위까지만 고르는 문제라는건데
이건 정렬하고
앞에서 shift 메서드로 앞의 값을 뺀걸 결과값에 push해서 넣어주면 될것같다.
스테픈 2km완료