본문 바로가기

Algorithm/programmers

[프로그래머스 - Kotlin] Level.1 직사각형 별찍기

반응형

https://programmers.co.kr/learn/courses/30/lessons/12969

 

코딩테스트 연습 - 직사각형 별찍기

이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다. 별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요. 제한 조건 n과 m은 각각 1000 이하인 자연수

programmers.co.kr


  • 출제 포인트
    1. Standard input과 output을 이해하고 있는가.
    2. loop(반복문)을 활용할 수 있는가.
  • 제출한 코드

  • 코드 분석
val (a, b) = readLine()!!.split(' ').map(String::toInt)

// Kotlin 1.6 부터 readLine()!!을 간단히 readln()으로 사용할 수 있다.
// 보통 map(String::toInt) 대신 map { it.toInt() }로 사용한다.

val (a, b) = readln().split(' ').map { it.toInt() }

 

  • readln( ) : Standard input으로부터 데이터를 가져오는 함수이다. 이 함수는 기본적으로 데이터를 String type으로 가져온다. 그래서 필요에 따라 데이터 타입을 변형시켜 주어야 한다.
  • split(' ') : 이 함수는 공백( ' ' )을 기준으로 입력값을 구분해주는 역할을 한다. readlin( ) 함수는 Standard input으로부터 들어온 데이터 전체를 모두 읽어 들인다. 즉  아래와 같이 'Standard input'이라고 입력하면 공백을 포함하여 모두 한 번에 입력되는 것이다. 이때 공백을 구분자로 하여 값들을 나누어 변수에 저장해 주는 함수가 split(' ')이다. 구분자는 임의로 바꿀 수 있다.
fun main() {
	val input = readln()  // 입력 : Standard input
    	println(input) 	  // 출력 : Standard input
}

 

  • map( ) : 기본적으로 컬렉션(list, set, map)을 다루기 쉽게 도와주는 확장 함수이다. 더 나아가 두 개 이상의 요소를 갖는 것들을 좀 더 쉽게 다룰 수 있게 해주는 함수이다. 위의 코드로 설명해 보면, readln().split(' ')을 통해 두 개의 값을 받아들였다. 그리곤 그 두 값을 map( ) 함수가 인자로 받아들여 차례로 하나씩 연산을 수행하고 변수 a, b에 각각 저장한다. it이 map( ) 함수가 받아들인 값을 나타낸다. 
repeat(b) {
	repeat(a) {
    		print('*')
    }
    println()
}

 

  • repeat( ) : 이 함수는 단순 반복 함수이다. 인자를 자연수로 받는다. 그리고 그 자연수만큼 반복한다. 기본적인 사용 방법은 두 가지가 있다. 첫 번째는 위의 코드처럼 반복할 코드 블럭을 이용하는 방법이고, 두 번째는 아래와 같이 사용하는 것 이다. 즉 문자열을 입력한 자연수 만큼 반복하여 이어 붙어준다. 이 두 가지의 사용방법에서 더 나아가 보면, 위의 코드와 같이 함수의 코드 블럭에 repeat( ) 함수를 중첩하여 사용할 수 있다. 그리고 repeat( ) 함수에서도 인덱스를 사용할 수 있는데, 코드 블럭에서 ' it '을 사용하면 된다. 그러면 자동으로 인덱스 0부터 반복 횟수만큼 사용된다. 
fun main() {
	println("a".repeat(3))
}

출력 : aaa

---------------------------------------------

fun main() {
	repeat(3) {
    		println(it + 10)
    }
}

출력 :
10
11
12

 

반응형