ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2024-03-04 BOOTCAMP TIL
    Android 2024. 3. 4. 23:44

    온보딩 주차 강의 내용이 끝나고 나서 따로 강의 내용을 다시 복습하진 않고 계속 알고리즘 문제를 풀었다.

    지금까지 25번까지 풀었고 오늘은 50번째 제출일이니까 부지런히 진도를 따라 잡을려면 하루에 2~3문제는 푸는게 좋을 것 같다.

    확실하게 느꼈던건 하루에 막 많이 푼다고 그만큼 실력이 늘어나는 느낌은 아니었다.

    내가 알고있는 개념을 이용해서 푸는 경우가 많았고 다른 사람들의 풀이도 참고했지만 하루동안 시간을 많이 할애해서 그런지 뒤돌아보면 금방 잊어버렸다.

    결론 → 하루에 2~3문제 풀면 진도를 따라잡을 수 있으니 한 문제 하나를 다양한 방법으로, 다른 사람들이 어떻게 풀었는지 정리해가면서 푸는 습관을 들이도록 해야겠다!

    다음은 알고리즘 문제를 풀면서 느낀 점이나 정리해야 할 점들이다.


    arr.forEach { if(it%divisor==0) answer+=it }

    (arr : IntArray) forEach 함수를 통해 배열의 인덱스 처음부터 끝까지 돌면서 원소를 it 으로 반환할 수 있다.

     
    var answer = intArrayOf()
    // answer.size==0
    answer += -1

    IntArray 클래스의 intArrayOf() 함수는 처음에 값을 할당하지 않아도 되며, 동적으로 값을 저장할 수 있다. 이때 사이즈는 0된다!

    for(i in 0 until seoul.size)

     0 <= i < seoul.size (i 값의 범위)

     seoul.forEachIndexed { index, s ->
            if(s=="Kim") answer = "김서방은 ${index}에 있다"
        }

    (seoul 은 Array이다.) array 에 대한 함수인 forEachIndexed 는 index와 그에 해당하는 값 s 를 받는다. 그리고 변수를 문자열에 저장할 때나 출력할 때는 ${ } 를 써줘야 한다.

     
    seoul.indexOf("Kim")

    array(seoul)에 저장되어있는 문자열 값의 인덱스를 알고 싶을 때 indexOf(문자열) 함수를 쓴다.

    var try_n = 0
    return if(count>500) -1 else count
    num % 2 == 0L

    1) 변수 이름으로 try 를 지정할 수 없다 (그래서 try_n이라고 했다)

    2) return 에 대하여 저런 식으로 더 간결한 코드를 작성할 수 있다

    3) 부등호(>,<)와 달리 등호(!=,==)는 long형과 int형에 대한 구분이 명확하다! 이때 Int 와 Long 은 모두 정수 타입인데 Int는 용량이 4byte, Long은 용량이 8byte로 큰 수를 인풋으로 받을 땐 int 보다는 long 을 쓰는게 좋다.

    return if(num%2==0) "Even" else "Odd"

    return 에 대한 추가적인 간결한 코드이다

    for(i in a downTo b)

    for 문에서 a부터 b까지 1씩 감소한다는 뜻이다

    return if(x%sum==0) true else false
    return (x%sum==0)

    return을 할 때 위 코드보다 아래 코드가 더 간결하다

    return n.toString().toCharArray().sortedArrayDescending().joinToString("").toLong()

    n은 Long 형이다 → (예) n=12345

    1) .toString → n="12345"

    2) .toCharArray() → n=['1','2','3','4','5']

    3) .sortedArrayDescending() → n=['5','4','3','2','1']

    4) .joinToString("") → n="54321"

    5) .toLong() → n=54321

    *jointoString 대신에 String(Descending 까지 마친 결과물).toLong() 을 해도 같은 결과이다.

    answer.sort()
    answer.sortDescending()

    answer은 IntArray 이다.

    1) .sort() → 오름차순 정렬

    2) .sortDescending() → 내림차순 정렬

    fun solution(n: Long): Long {
            val sqrt = Math.sqrt(n.toDouble())
            return if(sqrt%1.0==0.0) {
                Math.pow(sqrt+1.0,2.0).toLong()
            }
            else {
                -1L
            }
        }

    1) Math.sqrt(n:Double) → 실수값의 제곱근을 구하는 함수

    *이때, 25의 제곱근은 5인데 24의 제곱근이 없는게 아니다! 제곱근이 정수값이 아니라 실수값으로 존재한다.

    25의 제곱근인 5는 1로 나누었을 때 나머지가 0이지만, 24의 제곱근인 실수는 1로 나누었을 때 나머지가 0이 아니다.

    2) Math.pow(a:Double,n:Double) → a를 n제곱하는 함수이다. 

    s.first()!='0'

    s : String

    string 문자열의 첫번째 문자를 알고 싶은 경우 → .first() 함수를 쓴다.

    fun solution(n: Int) = (1..n).first{n%it==1}

    n을 어떤 수로 나누었을 때 나머지가 1이 되는 수 중 가장 작은 수를 찾는 문제인데 ...

    정말 간단 명료하게 설명됐다!

    1이상 n이하의 수 중에서 나머지가 1이 되는 수(it) 중 처음 원소(가장 작은수)를 리턴하는 코드이다.

    answer = (1..n).filter{n%it==0}.sum()

    이건 n의 약수의 합을 구하는 문제에 핵심 코드이다

    1이상 n이하의 수(it) 중에 n을 해당 수(it)로 나누어지는 수를 .sum() 함수를 이용해 합하는 것이다.

    filter{} 와 sum() 을 정말 잘 사용한 것 같다.

    fun solution(arr: IntArray) = arr.average()

    정수배열의 원소의 평균을 구할때 average() 함수를 쓰면 된다.

    for(i in arr.indices) {
                    if(arr[i] in -10000..10000) {
                        answer += arr[i]
                    }
                }

    for(i in arr.indices) 를 이용해 배열 arr의 모든 인덱스 값을 돌 수 있다.

    if(num1 in 0..10000 && num2 in 0..10000)

    이런 식으로 it 문에 조건을 2개 걸 수 있다.


    튜터님으로부터 들은 도움이 될만한 사항

    - 코드 정리 : ctrl + alt + L 

    - visual studio 말고 android studio 를 쓰고, 안에서 debugging이랑 Logcat 을 찍어보는 것은 어떤 부분에 오류가 있는지 확인하는 부분에서 도움이 된다!

     

    최종 느낀점

    이미 기존에 알던 방식 말고 새로운 접근법을 계속 시도해야 실력이 는다는 것을 알았다.

    기존 방식을 재활용하면서 익숙함을 늘릴 수는 있지만 실력이 는다는 느낌이 들진 않았다.

    오히려 코드를 작동할 때 오류가 나는 것을 감사하게 생각하고 그 부분을 해결하는데 있어 더욱 성장할 수 있다는 마음가짐으로 하면 좋을 것 같다!

     

    온보딩 주차동안 함께한 팀원들 덕분에 이 과정을 잘 버틸 수 있었던 것 같다.

    앞으로도 교육을 수료할때까지 꾸준히 열심히 해야겠다!

Designed by Tistory.