[코테] 프로그래머스 레벨1 - 코드리뷰

김재연·2023년 7월 4일
0
post-thumbnail

프로그래머스 레벨1 제대로 못풀었던 문제 코드 리뷰

1. 덧칠하기

내 코드

처음엔 칠한 벽을 하나씩 표시해서 나타낼 생각을 했는데, 이렇게 하니까 시간초과가 떴다.

그래서 section에서 가장 작은값(section[0])부터 시작해서, 한번 칠했을때 마지막으로 칠해지는 칸의 번호(section[0] + m - 1)를 구한 다음, 이 사이에 들어오는 숫자는 모두 삭제하는 과정을 section이 빌 때까지 반복했다. 이 반복문이 실행된 횟수가 롤러로 페인트칠을 해야하는 최소횟수다.

💎여기서 느낀 아주 중요한 점 2가지💎
1. 주어진 데이터를 가지고 굳이 쓰잘데기없는 다른 데이터를 생성하지 말 것
2. 시간초과가 뜨는데 시간복잡도를 줄일 수 없는 코드라면 접근방식부터가 틀려먹은 코드니 갈아엎을 것


2. 다트게임

내 코드

스택을 사용해야 편한 문제였다. 자료구조 스택에 관한건 다음에 고득점 kit를 풀면서 정리할 것이고, 여기서는 코드만 보도록 하겠다.

0~9점까지만 있으면 얼마나 좋으련만 쓸데없이 10이 껴있어서 어쩌나 했는데, 10을 "A"로 바꾼다음에 "A"를 사용할때 10으로 치환해서 사용했다.

S - 1제곱, D - 2제곱, T - 3제곱은 별다른 코드 없이 바로 접근해서 계산에 사용하기 위해 딕셔너리로 만든다.

이제 스택을 사용해서 수식을 계산할 건데, 숫자라면 스택에 넣고 아니라면 스택에 들어간 숫자를 꺼내 계산한 후에 다시 넣을 것이다.

dartResult를 한 문자씩 읽으면서 이게 *이면 마지막으로 들어간 2개를 뽑아서 2배씩 한 후에 다시 넣고, #이면 마지막으로 들어간 1개만 빼서 -1배를 하고 다시 넣는다. 그리고 A가 아닌 알파벳이라면 마지막으로 들어간 1개를 뽑아서 적절히 제곱 연산을 한 후에 다시 넣고, 숫자라면 단순히 스택에 넣는다. 답은 모든 연산이 끝난 후 스택에 남아있는 값들의 합이다.

스택의 성질만 잘 사용한다면 복잡하긴 해도 어렵지는 않은 문제였는데, 스택을 사용할 생각을 1도 못해서 헛짓거리를 굉장히 오래했다. 마지막에 들어간 값을 기준으로 변형을 해야하는 문제라면, 스택 사용을 고려해봐야겠다.


3. 개인정보수집 유효기간

내 코드

처음에는 연도 따로, 달 따로 계산했는데 얘도 잘하면 될거 같았는데 그때 너무 졸려서 반례를 생각해낼 힘이 없어서 그냥 포기했다.

날짜 YYYY.MM.DDYYYY * 12(달) * 28(일) + MM * 28(일) + DD로 변환해서, 현재 날짜와 약관에 따라 계산한 만료기한을 비교한 다음 현재 날짜가 더 크면 만료기한이 지났다는 뜻이므로 파기목록에 추가한다.

한달을 28일로 정의한게 수상했지만 귀찮아서 무시했는데, 아주 중요한 키였다. 역시 의미 없이 그냥 주는 문구는 없다는걸 깨달았다.,

날짜 계산을 이렇게 정수계산으로 하는것도 신박한 접근방법이었다.

profile
일기장같은 공부기록📝

0개의 댓글