37번~40번 문제풀이

강인호·2022년 7월 20일
0

알고리즘 문제풀이

목록 보기
12/39

37번 문제

처음에 이 문제를 풀고 나서 채점으로 넘겼을때 특정 테스트케이스 하나만 통과를 못해서 몇시간동안 잡다가 새로 지우고

천천히 단계를 세분화해서 다시 풀었다. 기본적인 구조자체는 틀린게 없었으나 충돌이 난 부분이

0점뒤에 #이 있을때 무시해야하는점, 0점뒤에 이 있을때 해당 점수는 무시하면서 앞의점수만 를 곱해야 하는점

10점일때 10점을 처리하는 방식 등등이 각각의 조건으로 넣고 돌리다보니 꽤 많이 부딪혀서 많이 헤멨던 것 같다.

일단 처음 시작은 dartResult를 쪼갠뒤 점수 처리를 했다.

i번째 인덱스와 i+1번째 인덱스를 합쳐서 10이 나오면,i+1번째 인덱스 즉 0 자리에 10을 넣고 1자리에는 @를 넣었다.

"1","0" 인 상태에서 "@","10"이 된것이다. 0자리를 바꾼 이유는 1자리를 바꿨을때 점수계산할때 충돌이 일어나서 0자리를 바꿨다.

그리고 단순 0점도 모두 @로 치환했다.

그리고 다시 for문을 돌려서 숫자일경우에 answer에 넣었다. isNaN은 숫자일때 false를 반환한다.


그 다음 점수계산을 하는데 0점일때 즉 @일때는 i값을 더하고(숫자 뒤에는 무조건 S,D,T중 하나가 오기때문에 해당 계산을 무시하기위함)

다만, @뒤에 10이 올경우에는 i값을 증가시키지 않고 그냥 넘어가서 제대로 계산을 하도록 조건을 주었다.

그리고 S,D,T일땐 각각 마지막으로 answer에 들어간 값을 1,2,3제곱 해주었고 여기까지는 큰 어려움이 없으나

별표시와 #을 처리할땐 조건을 따로 붙여줘야한다. 단순히 일때 마지막으로 들어간 두개의 값을 2 해주면 0점뒤에 *이 올 경우 충돌이 일어나고,

0뒤에 #이 올경우 무시하게끔 따로 조건을 주어야한다. * 같은 경우에는 i-2 혹은 i-3의 인덱스가 @일때는 하나의 값만 꺼내서 2를 곱하였고

( 숫자,문자,보너스 순으로 무조건 배치되기 때문에 0S# 0S의 경우기 때문에 i-2 i-3을 하였음)

#같은 경우는 똑같이 i-2, i-3이 0이면 무시하고 진행하게끔 조건을 넣었다.

문제자체가 다른문제에 비해 막 어렵거나 그렇진 않았지만 이번 2주차에서 시간이 제일 많이 걸린문제같다.

38번문제

별다른 설명이 필요없는 문제같다. 오름차순 정렬을 한뒤 0번째인덱스와 length-1번째 인덱스를 retunr해주었다.

최종코드는

39번문제

39번도 로직자체가 복잡하지는 않았다. for문으로 1부터 시작하고 2중for문으로 1일때 2345...더해주고

2일때는 345...더해주고 하는식으로 진행하다가 n과 같아지면 result를 1 증가하는 식으로 진행했다.

그런데 채점에서 런타임이 너무 길다고 뜨는 케이스가 있어서 어떻게 런타임을 줄이지 고민하다가 2번째for문에서 계산을 하던중

n보다 커져버리면 이미 연속수가 아니게 되니까 빠져나오게끔 break을 주었고 런타임에러도 뜨지 않았다.

최종코드는


40번문제


처음에는 문제 이해하고 주는값이 무슨의미인지 파악하는데도 어려웠지만 결국에 맨 윗줄부터 가로배열로 한줄씩

0이 빈칸 숫자가 각 숫자에 해당하는 인형을 뜻하고 moves는 각 라인에서 하나씩 인형을 뽑는다는 뜻으로 파악하고 진행했다.

처음에는 빈 배열하나에 board의 길이-1만큼 빈배열을 다시 넣었다.

그 다음 board를 뒤집어서 첫번째인덱스가 첫번째 가로줄의 인형배치를 나타내게끔 진행했다.

그 다음 for문을 돌려서 각 라인별로 쌓여있는 인형배열을 구했다.

1번째 인형은 1번배열에,2번째 인형은 2번배열에 가게끔 2중for문을 돌려서 각 라인별 인형배열을 구한 뒤 아래에있는 인형부터 넣었으니

각 배열의 첫번째 인덱스가 맨 위에 인형을 가리키게끔 다시 각각 뒤집었다.

그 다음에는 moves를 하나씩 돌면서 뽑은 인형 배열에 해당 인형을 넣고

뽑은 인형 배열을 for문 돌려서 연속된 인형이 있으면 해당 인형2개를 splice로 지우고 answer값을 2증가시키는 식으로 답을 구했다.

최종코드는

40번 문제같은 경우에는 로직을 하나하나 짜는것 자체는 그리 크게 어렵진 않았던것같다.

0개의 댓글