오늘은 아침에 알고리즘 문제를 풀고 오후 내리 키오스크 과제만 했다. 9to9에 익숙해질수록 시간을 효율적으로 쓰는게 아니라 오히려 시간을 허투루 쓰고 있는 것 같은 기분이다. 오늘 하루종일 무엇을 했는지 돌이켜보자면 한게 별로 없는것 같다는 생각이 든다. 확실히 팀원분들의 존재가 새로운 것을 배우고 발전하는데에 도움을 많이 주는 것 같다. 아래 코드도 kotlin을 입력하면 가독성이 좋아진다고 조언을 들은 덕에 깔끔하게 작성해보았다.
오늘 푼 문제는 서울에서 김서방 찾기라는 문제와 나누어 떨어지는 숫자배열이라는 문제였다.
class Solution {
fun solution(arr: IntArray, divisor: Int): IntArray {
var answer = intArrayOf()
for (ele in arr) {
if (ele % divisor == 0) {
answer += ele
}
}
if (answer.size == 0) {
answer += -1
} else {
answer.sort()
}
return answer
}
}
class Solution {
fun solution(arr: IntArray, divisor: Int): IntArray {
var answer : MutableList<Int> = mutableListOf()
for (num in arr) {
if (num % divisor == 0) {
answer.add(num)
}
}
answer.sort()
if (answer.size == 0) {
return intArrayOf(-1)
}
return answer.toIntArray()
}
}
저번에 분명 내림차순으로 배열하는 문제가 있었기 때문에 나누어떨어지는 값을 구해서 오름차순으로 배열하는 sort를 사용하면 간단하겠다고 생각했다. for문을 arr안에서 돌려서 divisor로 나눌때 나머지가 0인 값만 하나하나 추가할 생각이었다. 그런데 여기서 add로 추가하려니 array였던 탓에 수정이 되지를 않았다. 그래서 +=로 더하는 방식을 사용하기로 했다. 그 다음은 -1이 조금 헷갈렸다. 기억을 조금씩 더듬다보니 size로 배열의 크기를 확인 할 수 있다는 것이 생각이 나서 if로 answer에 -1을 추가해줬다. 그 다음 sorted를 사용하면 자료형이 뭔가 문제가 생겼던 탓에 answer.sort()의 작업을 else에 넣어주었다.
그렇게 하니 팀원분이 주신 조언이 += 연산자는 매번 새롭게 만들어서 할당하는 것이다 보니 낭비가 심하다는 것과 -1을 intArrayOf를 이용해 바로 리턴할 수도 있다는 것이었다. 그렇게 고친 코드가 아래쪽에 있는 것이다. 이런식으로 코드를 간소화하는 요령을 익히는 것이 많이 도움이 되는 것 같았다.
그리고 filter와 isEmpty()를 사용하는 코드는 아래 링크로 남겨뒀다. 이것도 팀원분들이 말씀해주신 백준허브라는 것을 이용하여 프로그래머스에서 푼 문제를 깃허브에 연동해서 올리도록 한 것이다. 앞으로 유용하게 쓸 것 같다.
나누어 떨어지는 숫자 배열.github
확실히 github로 커밋해가면서 과제를 하다보니 단순히 과제 구현만 문제가 아니라 github 이용하는 것에 있어서도 어려움이 있었다. 그 과정에서 커밋컨벤션을 접할 수 있었다. 깔끔하게 정리해둔 분들이 워낙 많은 덕에 나도 깔끔하게 정리할 수 있었다.
Feat: 추가 결제 클래스 및 함수
사용자의 소지금액과 결제 클래스를 만들어 비교하도록 설계
기본적으로 "타입: 제목 \n 본문내용 \n 코드" 같은 느낌으로 작성했던 것 같다.
타입이나 꼬리말에 들어가는 코드의 자세한 작성법은 필요할 때 링크를 들어가서 확인해봐야겠다. 일단 한동안은 저 정도 수준으로 충분할 것 같다.
과제는 현재 필수 구현 항목만 치자면 80% 정도 완성한 것 같다. 메뉴판 출력까지는 끝났고 결제하는 것은 틀 정도만 잡아둔 상태다. 현재 고민되는 부분은 장바구니 기능과 세부메뉴를 선택했을 때 이전으로 돌아가는 기능이다.
메인메뉴에서 음식항목들로 들어갔다가 돌아오는 것까지야 while문에서 continue로 처리할 수 있다고 쳐도 상세 메뉴까지 들어갔다가 딱 그 전 단계로 돌아가는 기능을 어떤 식으로 구현해야될지 머리가 아프다.
그리고 장바구니에 메뉴를 계속 추가해둔채 반복하는 과정이 조금 걱정이 된다. 싱글턴을 이용하는게 맞을 것 같은데 아직 확실히 감이 잡히지 않는다.
사실 일단 결제까지도 완성이 되지 않았기 때문에 그 부분이 최우선 목표다. 4주차 강의 실습 코드에서 cashshop 항목이 있는 걸 보고 살짝 참고했는데 역시나 내 코드에 최적화시키려면 조금 신경을 써줘야할 것 같다.
과제에서 메뉴 리스트를 한번에 관리할 수 있도록 하라고 했는데 이미 나는 메뉴별로 클래스를 만들어버려서 그 부분이 조금 곤란하긴 하다. 튜터님께 자문을 구해서 빨리 엎어야할지 어쩔지를 정해야할 것도 같다. 내일이 정말 바쁜 하루가 될 것 같다.
어쨌거나 오늘 메뉴를 리스트로 인덱스를 정한 다음 map을 이용해서 메뉴 이름과 가격을 엮어서 메뉴를 출력하는 공정을 깔끔하게 정리할 수 있었다. 정리를 하고서는 어찌나 뿌듯했는지 모르겠다. 사실 함수 내용이 똑같으니 좀 더 최적화할 수 있는 방법이 있을 것 같은데 상속 활용법을 아직껏 확실하게 마스터하지 못해서 내 짧은 머리로는 지금 정도가 한계였다. 내일은 정말 더욱 확실히 집중해서 과제를 끝내보도록 해야겠다.
마지막으로 velog 작성시 도움이 되는 마크다운 작성법을 첨부하겠다.