코딩 (독학)/★ Algorithm

[Kotlin Algorithm] 코틀린 알고리즘 문제풀이 TIP !

짱득이 2022. 4. 6. 16:33
300x250
반응형

320x100

 

이번 포스트에서는 Android Native Language인 Kotlin을 이용한 알고리즘 문제를 풀 때의 유용한 TIP을 공유하고자 한다.

 

주로 방문하는 알고리즘 문제풀이 사이트는 아래와 같다.

 

1) 백준 (난이도 등 카테고리가 상세하게 잘 나뉘어져 있음.)

 

Baekjoon Online Judge

Baekjoon Online Judge 프로그래밍 문제를 풀고 온라인으로 채점받을 수 있는 곳입니다.

www.acmicpc.net

 

 

2) 프로그래머스 (알고리즘 별로 나뉘어져 있고, 프로필을 작성하여 채용 시장에 올릴 수 있고, 다양한 스킬업 프로그램이 있음)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

각 사이트 별로 잘 활용하면 분명 실력이 많이 오를 것이다.


Kotlin은 JAVA 기반 언어로 만들어져 Android에 특화된 네이티브 언어이며, JAVA에서 몇몇 단점이 개선된 언어이기 때문에 JAVA의 모든 기능을 사용할 수 있는 장점이 있다.

 

아래에 설명하는 코드 역시 JAVA에서도 사용 가능한 코드로, 사용하는 모듈을 보면 java 기반 모듈이 많은것을 확인할 수 있다.

 

대부분의 알고리즘 사이트는 main 함수에 특정 값을 입력 받도록 하여 문제를 풀어나가는 방식이므로,

출제자로부터 값을 입력받는 형식으로 설명하였다.

 

1. readLine( )

fun main(args : Array<String>) {
	var name = readLine()
    println("name : ${name} !") // println이므로 개행
    print("name : ${name} ~") // print이므로 개행하지 않음
    println("name : ${name ....") // println이므로 개행
}
반응형

 

// Kotlin 입력
name : Kotlin !
name : Kotlin ~ name : Kotlin ....
Process finished with exit code 0

readLine()을 사용하여 문자열을 입력 받을 수 있다. 위 코드에서 main 함수는 매개변수를 문자열(String) 타입을 가진 변수 args로 받기 때문에, 혹여 숫자를 가지고 연산 할 것이라면 별도의 과정을 통해 숫자로 변환 해 주어야 한다.

 

출력은 println 또는 print 등으로 해주었고, print에서 개행을 원한다면 개행 문자를 입력 해 주어야 한다.

 

 

2. Scanner( )

Java에서 많이 볼 수 있는 Scanner다. C언어에서의 Scanf와 같다.

 

코드의 상단에 모듈을 추가하여 사용하여야 한다. 아래 코드를 참고하자.

import java.util.*
// import java.util.Scanner (스캐너만 추가할거면)

fun main(args: Array<String>) {
	var input = Scanner(System.`in`)
    
    input.nextInt() // 입력받기
    
    println(input + input.nextInt())
}

 

위와 같이 객체를 받는 변수를 만들어서 사용해도 되고, 클린 코드를 원한다면 아래와 같이 작성 해줄 수도 있다.

import java.util.Scanner
// import java.util.* 상관없음

fun main(args: Array<String>) = with(Scanner(System.`in`)) {
	println(nextInt() + nextInt())
}

 

이렇게 편리하게 with 문법을 사용하여 바로 스캐너를 만들고, 아래에서는 nextInt( ) 만 사용하여 연산할수도 있다.

 

Scanner 객체에서 주로 사용하는 메소드는 아래와 같으니 참고하자.

  • next( ) : String!
  • nextInt( ) : Int
  • nextDouble( ) : Double
  • nextByte( ) : Byte
  • nextShort( ) : Short
  • nextLong( ) : Long
  • nextFloat( ) : Float
  • nextLine( ) : String!   => '\n'을 포함하는 한 라인을 읽고, '\n'을 버린 나머지 문자열을 String 타입으로 Return

 


* .toInt()를 했더니 ASCII 코드값이 나와버렸을 경우 해결 방법

알고리즘 문제를 풀다보면 String값을 Int 형식으로 변환 해 줘야하는 순간도 꽤나 있다.

 

이럴때는 [바꿀 값].toInt() 를 통해 변환 해줄 수 있지만.. String 값을 Int형식으로 변환하다 보면 우리가 원하는 값으로 바뀌지 않을때도 있다.

 

바로 ASCII 코드 때문인데, 모든 문자가 ASCII 코드로 변환되는것은 아니고, ASCII 코드표에 해당하는 값이었을 경우에는 ASCII 코드가 반환되는 것이다.

 

예를 들어, "12345"라는 값이 있을 때 String.toInt( ) 는 String 을 Int 타입으로 Casting 해 준다.

이 값이 Char "1" 이었을 경우, 값을 .toInt( ) 하게 되면 Int 형 1로 반환 해 줄까?

 

그렇지 않다. 

 

"12345".toInt() => 12345 가 출력됨.

"1".toInt() => 49 // 기대한 반환값 : 1, 그러나 실제로 반환된 값 : 49

 

위와 같은 결과를 가져오게 된다.

그렇다면 기대한 반환값을 올바르게 얻고자 한다면 어떻게 해야할까? 많은 방법이 있지만 이번 글에서는 조금 더 간단한 방법을 가져왔다.

Character.getNumericValue 함수를 이용하면 된다.

Character.getNumericValue("1")

// Int형 1이 출력

 

만약 현재 내가 출력한 ASCII 코드값이 궁금하다면 윈도우 검색에 문자표를 검색하면 아스키 코드값을 바로 확인할 수도 있다.

 

 

참고한 블로그

 

Converting Char to Int in Kotlin

The Kotlin standard library contains a lot of helper functions on top of the Java standard library for our convenience. Some of those functions help us in converting between different data types. For

blog.jdriven.com

 

 

[Kotlin] Char타입을 Int로 변환하는 방법

Kotlin Standard Library는 다양한 Helper Function을 제공한다. "12345"라는 값이 있을 때, String.toInt()는 String을 Int타입으로 캐스팅해준다. Java에서 Integer.parseInt(str)과 동일하다. 그렇다면 Char의..

shining-life.tistory.com

 

 

(Kotlin) Scanner로 입력받기

이번 글은 콘솔에서 데이터를 입력 받는 부분에 대해서 알아 보겠습니다. 사용자로부터 데이터를 입력 받기 위해서는 Scanner 객체에 System.in(InputStream)을 넣어서 생성한 인스턴스를 사용해야합니

googry.tistory.com

 

 

[Kotlin] 알고리즘 문제풀이를 위한 코틀린 입력, 출력

코틀린은 자바의 모든 코드를 바탕으로, 몇몇점이 개선된 언어이므로, 자바의 모든 기능을 사용할 수 있다. 1. readLine() 사용 fun main(args: Array ) { var name = readLine() println("name : ${name} !") //..

hanyeop.tistory.com

 

728x90
반응형