Kotlin 홀짝 구분하기, flag에 따라 다른 값 반환하기, 정수 부분, 공배수, 소문자로 바꾸기 [코딩기초 트레이닝]

Bettor·2024년 3월 12일
4

프로그래머스의 프로그래머스 스쿨에서 코딩 기초 트레이닝에 있는 124개의 문제 풀이를 다루고자 합니다.
나의 풀이와 다른 사람의 풀이에 대해 다루며, 개념을 새로 다지는 과정을 다루려고 합니다.
끝에는 백준 허브를 통해 diff를 남겨놓을 예정입니다.

0. 양식

문제설명

나의 풀이

최종 제출

의문점과 해결 과정

다른 사람의 풀이 3가지

1. 홀짝 구분하기

문제 설명

자연수 n이 입력으로 주어졌을 때 만약 n이 짝수이면 "n is even"을, 홀수이면 "n is odd"를 출력하는 코드를 작성해 보세요.
제한사항
1 ≤ n ≤ 1,000
입출력 예
입력 #1
100
출력 #1
100 is even
입력 #2
1
출력 #2
1 is odd

나의 풀이

fun main(args: Array<String>) {
    val a = readLine().!!toInt()
    if (n / 2 == 0) {
        println("n is even")
    } else {
        println("n is odd ")
    }
}

최종 제출

fun main(args: Array<String>) {
    val n = readLine()!!.toInt()
    if (n % 2 == 0) {
        print("$n is even")
    } else {
        print("$n is odd")
    }
}

의문점과 해결 과정

  1. n이 입력으로 주어지는데 왜 상수 a로 선언하는가?
    -> 일부로 틀리라고 해놓은것 같다 a는 의미없는거 같아서 n으로 전부 바꿔주었다.
  2. '/'과 '%'이 헷갈린다.
    -> /는 나눗셈으로 몫, $는 나눗셈 후 나머지를 구하는 것이다.
  3. 초기화 상태에서 상수 선언부의 readline().!!toInt()는 readline()!!.으로 안되어있고 왜 이전처럼 되어있을까?
    -> 일부로 틀리라고 해놓은 것 같다. !!가 있는 이유는 readLine()의 반환 값은 String? 이므로 Not Null 타입으로 변환해주기 위해 !!를 붙여준다.
  4. 'print'와 'println'이 헷갈린다.
    -> 개행을 하냐 안하느냐의 차이이다.
  5. $이 뭐더라...
    -> 문자열 안에서 $(달러) 기호 뒤에 가져 올 변수 이름으로 변수 값을 문자열 안에서 사용할 수 있다.

다른 사람의 풀이 3가지

fun main(args: Array<String>) {
    val a = readLine()!!.toInt()
    println("$a is ${if (a % 2 == 0) "even" else "odd"}")
}

fun main(args: Array<String>) {
    val a = readLine()!!.toInt()
    if (a%2 == 0) println("${a} is even")
    else println("${a} is odd")
}

fun main(args: Array<String>) {
    val n = readln().toInt()
    println("$n is ${if (n % 2 == 0) "even" else "odd"}")
}

2. flag에 따라 다른 값 반환하기

문제 설명

두 정수 a, b와 boolean 변수 flag가 매개변수로 주어질 때, flag가 true면 a + b를 false면 a - b를 return 하는 solution 함수를 작성해 주세요.

제한사항
-1,000 ≤ a, b ≤ 1,000
입출력 예
a b flag result
-4 7 true 3
-4 7 false -11

나의 풀이(최종 제출)

class Solution {
    fun solution(a: Int, b: Int, flag: Boolean): Int {
        var answer: Int = 0
        if (flag == true) {
            return a + b
        } else {
           return a - b
        }
        return answer
    }
}

의문점과 해결 과정

  1. 당연히 맞겠지하고 코드를 돌려보니 돌아가지 않았다. 그래서 'kotlin if true' 이런식으로 검색했는데 '=='를 써야한다고 써 있어서. 이마를 탁 쳤다. 이런 실수를!

다른 사람의 풀이 3가지

class Solution {
    fun solution(a: Int, b: Int, flag: Boolean): Int = if (flag) a + b else a - b
}
class Solution {
    fun solution(a: Int, b: Int, flag: Boolean): Int {
        var answer: Int = 0

        if (flag) {
            answer = a + b
        } else {
            answer = a - b
        }
        return answer
    }
}
class Solution {
    fun solution(a: Int, b: Int, flag: Boolean): Int {
        return if (flag) a + b else a - b
    }
}

3. 정수 부분

문제 설명

실수 flo가 매개 변수로 주어질 때, flo의 정수 부분을 return하도록 solution 함수를 완성해주세요.
제한사항
0 ≤ flo ≤ 100
입출력 예 :
flo result
1.42 1
69.32 69

나의 풀이(최종 제출)

class Solution {
    fun solution(flo: Double): Int {
        var answer: Int = 0
        answer = flo.toInt() // 값을 담을 곳이 필요하다 그래서 answer
        return answer
    }
}

의문점과 해결 과정

  1. 처음에 flo.toInt()로 해서 틀렸는데, answer = 을 앞에 붙혀줘서 맞췄다.

다른 사람의 풀이 3가지

class Solution {
    fun solution(flo: Double): Int {
        return flo.toInt()
    }
}
class Solution {
    fun solution(flo: Double) = flo.toInt()
}
class Solution {
    fun solution(flo: Double): Int {
        var answer: Int = flo.toInt()
        return answer
    }
}

4. 공배수

문제설명

정수 number와 n, m이 주어집니다. number가 n의 배수이면서 m의 배수이면 1을 아니라면 0을 return하도록 solution 함수를 완성해주세요.
제한사항
10 ≤ number ≤ 100
2 ≤ n, m < 10
입출력 예
number n m result
60 2 3 1
55 10 5 0

나의 풀이

class Solution {
        fun solution(number: Int, n: Int, m: Int): Int {
            var answer: Int = 0

            if (number % (n * m) == 0) {
                return 1
            } else {
                return 0
            }
            return answer
        }

    }
    // return if (number % (n * m) == 0) 1 else 0

최종 제출

class Solution {
    fun solution(number: Int, n: Int, m: Int): Int {
        var result: Int = 0
        return if (number%n == 0 && number%m == 0) 1 else 0
    }
}

의문점과 해결 과정

  1. return answer를 넣을까 뺄까하다가 넣는게 맞는거같아서 넣고, 매개변수 number를 실수로 num으로 쓰고 제출해서 틀렸었다. 코드 실행은 되는데 나중에 알고보니 제출할때는 실패했었다.

  2. 일단 return을 해야하는 이유는 위의 if-else에서 return 되지 않는 경우가 있을 수 있으니 명시적으로 함수 본문의 마지막에 return을 해줘야한다.

  3. 결국에는 다른 사람의 풀이를 이용했다. 그나마 생각했던 로직과 비슷한걸로 선택했다.

다른 사람의 풀이 3가지

class Solution {
    fun solution(number: Int, n: Int, m: Int): Int = if (number % n == 0 && number % m == 0) 1 else 0
}
class Solution {
    fun solution(number: Int, n: Int, m: Int): Int {
        var answer: Int = 0

        if (number % n == 0 && number % m == 0) {
            answer++
        }

        return answer
    }
}
class Solution {
    fun solution(number: Int, n: Int, m: Int): Int {
        val answer = if (number % n == 0 && number % m == 0) 1 else 0
        return answer
    }
}

5. 소문자로 바꾸기

문제설명

알파벳으로 이루어진 문자열 myString이 주어집니다. 모든 알파벳을 소문자로 변환하여 return 하는 solution 함수를 완성해 주세요.

제한사항
1 ≤ myString의 길이 ≤ 100,000
myString은 알파벳으로 이루어진 문자열입니다.
입출력 예
myString result
"aBcDeFg" "abcdefg"
"aaa" "aaa"

나의 풀이(최종 제출)

class Solution {
    fun solution(myString: String): String {
        var result: String = ""
        
        result = myString.toLowerCase()
        
        return result
    } 
}

의문점과 해결 과정

  1. 소문자로 바꾸는 방법을 몰라서 구글링했는데 해당 함수를 찾게 되어서 바로 해결했다.

다른 사람의 풀이 3가지

fun solution(myString: String) = myString.toLowerCase()
fun solution(myString: String): String {
        return myString.toLowerCase()
    }
fun solution(myString: String): String {
    var answer: String = myString.toLowerCase()
    return answer
}

0개의 댓글