본문 바로가기

[TIL][내일배움캠프]

[내일배움캠프][TIL] 23.11.24 (금) - 콜라 문제, 앱개발 강의

1. 코드카타

 

오늘 푼 알고리즘 문제는 '콜라 문제' 이다.

 

 콜라 문제
 콜라를 받기 위해 마트에 주어야 하는 병 수 a, 빈 병 a개를 가져다 주면 마트가 주는 콜라 병 수 b, 가지고 있는 빈 병의 개수 n이 매개변수로 주어질 때, 받을 수 있는 콜라의 병 수를 return하는 solution 함수 작성하기.

 

예전에 한 번 본 적이 있던 유형의 문제다.

빈 병을 가져와서 새 콜라를 받아먹고, 다 먹고 남는 콜라병으로 또 바꿔먹고, 그렇게 골수까지 빨아먹는.

 

이 문제는 그걸 일반화시켜서 함수로 표현하는 문제다.

 

 

우선 이 콜라 문제의 메커니즘은 다음과 같다.

 

  • 빈 병 n개를 가져다 주면, 빈 병 a개 당 b개의 콜라를 준다.
  • 따라서 남는 콜라병의 개수는 n을 a로 나눈 몫에 b를 곱한 값과, 그 나머지를 더한 값이다. 그리고 그걸로 앞의 과정을 반복한다.
  • 이런 식으로 더 이상 교환할 수 없을 때까지 교환하면, a로 나눈 몫에 b를 곱한 값을 모두 더한 값이 빈 병 n개로 받을 수 있는 콜라의 병 수이다.

이를 이용해서 코드를 짜면 다음과 같이 나온다.

 

fun solution(a: Int, b: Int, n: Int): Int {
    var answer: Int = 0
    var remain: Int = n
        
    while(remain >= a){
        answer += (remain/a)*b
        remain = (remain%a) + ((remain/a)*b)
    }
        
    return answer
}

 

remain 변수는 빈 병을 콜라로 교환한 후 남는 콜라병의 개수를 뜻한다.

(당연히 초기값은 본래 가지고 있는 빈 병 n을 사용한다.)

 


 

이번 문제는 내가 모르던 코딩 문법을 요한다든가, 혹은 내가 무심코 놓치고 있던 부분이 있는 것이 아니라서 문제 자체에서는 특별히 피드백할 부분이 없었다.

 

다만, 그 외적인 부분에서 피드백할 부분이 있었는데 지금까지 푼 알고리즘 문제를 찬찬히 살펴본 결과, 내가 어느 부분에서 취약한지를 알 수 있었다.

 

내가 지금까지 풀이에 성공한 알고리즘 문제들의 90% 이상은 수학적인 지식이 요구되는 문제들이었다.

반대로 아직 내가 풀지 못 했거나 아예 손도 못 댄 문제들의 대부분은 '문자열', 혹은 배열&컬렉션 등을 바탕으로 풀어야하는 문제들이었다. 예를 들면 알파벳을 특정 수만큼 밀어야하는 문제("AB" -> 3만큼 밈 -> "DE")같은 경우 문제는 이해했는데 이걸 어떻게 구현시켜야 할지 감도 잡히지 않더라.

 

이제 이 문제들을 언제까지고 방치할 수도 없고, 나 또한 주어진 문제들은 적어도 다 풀어보고 싶은 욕심도 있었기에 이를 어떻게 해결할지 생각해보기로 했다.

 


 

2. 앱개발 강의와 Android Studio

 

내가 현재 참여하고 있는 내일배움캠프의 과정은 'KDT 실무형 Android 앱개발자 양성과정'이다.

따라서 지금 배우고 있는 모든 과정들이 이 Android 앱 개발과 관련이 있으며, Kotlin 문법 또한 그 과정의 일환이다.

 

그리고 이렇게 배웠으면 실제로 앱을 만드는 연습도 해야지.

 

이번 주차에는 Android Studio를 이용해서 실제로 앱을 만드는 방법을 알려주는 강의를 시청했다.

앱 종류는 3가지였는데 BMI 수치 계산기, 로또번호 생성기, 그리고 MBTI 테스트.

 

영상을 통해서 아무것도 없는 빈 공간에 디자인 폼을 만지고, 코딩을 쓱쓱 하면서 앱을 완성시키는 걸 보니 꽤나 신기하기도 하고 이제 이걸 내가 하는 거구나라고 실감이 나기 시작했다.

 

 

다만, 이걸 실제로 보면서 따라해야 실력도 늘고 기억도 오래 남는데 이번 주차에는 영상 시청만 하고 실제로 내가 직접 쳐보면서 만들지는 않았다.

 

그 이유로 몇 가지가 있었는데 우선은 첫 주차라 이것저것 정리하다보니 실제로 적용시킬 시간이 나지 않았던 것.

 

그리고 이것보다 더 중요한 문제가 하나 있었는데 현재 노트북으로 Android Studio가 원활하게 돌아가지 않았다!

아예 실행조차 안 되는 건 아닌데 다른 작업을 하면서(화상채팅 키고 영상 키면서) 돌리려니 메모리랑 CPU가 버티질 못하드라. 그래서 중간에 몇 번 꺼지기도 했고.

 

음…. 미뤄왔던 노트북 교체를 해야 할 시기인가.

 

아무튼간에 이번 주차에는 앱은 이렇게 만드는 것이다라고 수박 겉핥기 식으로 배웠다. 소위 찍먹이라고 하는 수준.

 

무언가 실제 결과물이 남지 않으니 약간은 허전한 느낌도 들지만, 이걸 실제로 만드는 내 모습을 상상하며 오늘의 글을 마친다.