
※ 키워드도 식별자로 사용이 가능하다
백틱(`)으로 감싸주면 키워드가 아닌 식별자로 사용할 수 있다.
ex) 코틀린에서는 in이 키워드라서 System.in이 아니라 System.`in`으로 사용하고 있음
나중에 자바코드로 변환되는 과정때문에 권장하진 않음
연습 사이트로 백준(https://www.acmicpc.net/) 추천
오전에는 숙제 문제 풀이
step1) 기능 정리
1. 키보드로 부터 입력 받는 기능
2. 짝수 여부를 판단하여 출력하는 기능
step2) 각 기능별 함수를 구현
아직 함수 내부의 코드를 작성하지 않는다.
// 키보드로 부터 입력 받는 기능
fun inputNumber():Int{
}
// 짝수 여부를 판단하여 출력하는 기능
fun printResult(number:Int) {
}
step3) 각 함수 내부의 코드를 구현해준다.
이 때, 함수 하나의 구현이 끝나면 의도한대로 동작하는지 반드시 테스트를 해준다.
fun main() {
inputNumber 함수 테스트
val a1 = inputNumber()
println("a1 : $a1")
printResult 함수 테스트
printResult(101)
printResult(104)
}
// 키보드로 부터 입력 받는 기능
fun inputNumber():Int{
val scanner = Scanner(System.`in`)
// 입력을 받는다.
print("숫자를 입력해주세요 : ")
val number = scanner.nextInt()
// 입력받은 값을 반환한다.
return number
}
// 짝수 여부를 판단하여 출력하는 기능
fun printResult(number:Int) {
if(number % 2 == 0){
println("짝수 입니다")
}else{
println("홀수 입니다")
}
}
step4) 프로그램이 동작하도록 main 함수에서 각 함수들을 순서에 맞게 호출해준다.
fun main() {
// 키보드로 부터 입력을 받는다.
val number:Int = inputNumber()
// 입력받은 숫자가 짝수인지 홀수인지 판단하여 출력한다.
printResult(number)
}
숫자를 입력해주세요 : 5
홀수 입니다
주민등록 번호는 - 없이 13자리의 숫자를 입력받는다.
처음 두자리는 생년을 의미한다.
세번째 네번째는 생월을 의미한다.
다섯번째 여섯번째는 생일을 의미한다.
일곱번째 숫자는 다음과 같다.
9 : 1800년대생 남성
0 : 1800년대생 여성
1 : 1900년대생 남성
2 : 1900년대생 여성
3 : 2000년대생 남성
4 : 2000년대생 여성
5 : 1900년대생 외국인 남성
6 : 1900년대생 외국인 여성
7 : 2000년대생 외국인 남성
8 : 2000년대생 외국인 여성
출력은 다음과 같이 한다
1999년 10월 21에 태어난 남성입니다
fun main() {
// inputJuminNumber 함수 테스트
// var a1 = inputJuminNumber()
// println("a1 : $a1")
// getBirthYear 함수 테스트
// val a1 = getBirthYear(1234567891234)
// println("a1 : $a1")
// getBirthMonth 함수 테스트
// val a1 = getBirthMonth(1234567891234)
// println("a1 : $a1")
// getBirthDate 함수 테스트
// val a1 = getBirthDate(1234567891234)
// println("a1 : $a1")
// getSevenNumber 함수 테스트
// val a1 = getSevenNumber(123456_7891234)
// println("a1 : $a1")
// getBirthAges 함수 테스트
// val a1 = getBirthAges(1)
// println("a1 : $a1")
// getGender 함수 테스트
// val a1 = getGender(1)
// println("a1 : $a1")
// printResult 함수 테스트
// printResult(2010,10,08,"여성")
// 주민등록 번호를 입력받는다.
val juminNumber = inputJuminNumber()
// 생년을 추출한다.
val year = getBirthYear(juminNumber)
// 생월을 추출한다.
val month = getBirthMonth(juminNumber)
// 생일을 추출한다.
val date = getBirthDate(juminNumber)
// 7번째 숫자를 추출한다.
val sevenNumber = getSevenNumber(juminNumber)
// 년대를 가져온다.
val ages = getBirthAges(sevenNumber)
// 성별을 가져온다.
val gender = getGender(sevenNumber)
printResult(ages+year,month,date,gender)
}
// 1. 주민등록 번호를 입력받는 기능
fun inputJuminNumber():Long{
val scanner = Scanner(System.`in`)
// 주민등록 번호를 입력받는다.
print("주민번호 13자리를 입력해주세요(- 빼고..) : ")
val juminNumber = scanner.nextLong()
// 입력받은 주민번호를 반환한다.
return juminNumber
}
// 2. 생년을 추출한다.
fun getBirthYear(juminNumber:Long):Long{
val a1 = juminNumber / 100_000_000_000
return a1
}
// 3. 생월을 추출한다.
fun getBirthMonth(juminNumber: Long):Long{
val a1 = juminNumber / 1_000_000_000
val a2 = a1 % 100
return a2
}
// 4. 생일을 추출한다.
fun getBirthDate(juminNumber:Long):Long{
val a1 = juminNumber / 10_000_000
val a2 = a1 % 100
return a2
}
// 5. 일곱번째 숫자를 추출한다.
fun getSevenNumber(juminNumber:Long):Long{
val a1 = juminNumber / 1_000_000
val a2 = a1 % 10
return a2
}
// 6. 몇년대 생인지를 파악한다.
fun getBirthAges(sevenNumber:Long) = when(sevenNumber){
9L, 0L -> 1800
1L, 2L, 5L, 6L -> 1900
3L, 4L, 7L, 8L -> 2000
else -> 0
}
// 7. 성별을 파악한다.
fun getGender(sevenNumber: Long):String{
// 짝수는 여자, 홀수는 남자이기 때문에
// 2로 나눈 나머지를 구한다.
if(sevenNumber % 2 == 0L){
return "여성"
}else{
return "남성"
}
}
// 8. 출력한다.
fun printResult(year:Long, month:Long, date:Long, gender:String){
println("${year}년 ${month}월 ${date}에 태어난 ${gender}입니다")
}
숫자1..숫자2 : 숫자1 부터 숫자2 까지 1씩 증가되는 값을 관리하는 요소를 만들어준다.println((1..10).toList())
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
숫자1 until 숫자2 또는 숫자1 .. < 숫자2 : 숫자1 부터 숫자2 -1 까지 1씩 증가되는 값을 관리하는 요소를 만들어준다.println((1 until 10).toList())
println((1 ..< 10).toList())
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
step : step 을 지정하면 증가폭을 설정할 수 있다.println((1..10 step 2).toList())
[1, 3, 5, 7, 9]
downTo : 1씩 감소되는 값을 관리할 수 있는 요소를 만들 수 있다.println((10 downTo 1).toList())
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
downTo도 step을 설정하면 감소 폭을 설정할 수 있다.println((10 downTo 1 step 2).toList())
[10, 8, 6, 4, 2]
// 1..10 코드로 인해 1부터 10까지 값 10개를 관리하는 요소가 생성된다.
// 이를 통해 for문을 사용하기 때문에 for문이 관리하는 코드가 총 10번 반복된다.
// 이 때, 반복 번째에 해당하는 값이 in 좌측에 있는 변수에 담겨진다.
for(v1 in 1..10){
println("v1 : $v1")
}
v1 : 1
v1 : 2
v1 : 3
v1 : 4
v1 : 5
v1 : 6
v1 : 7
v1 : 8
v1 : 9
v1 : 10
var a1 = 0
while(a1<10){
println("while - $a1")
a1++
}
while - 0
while - 1
while - 2
while - 3
while - 4
while - 5
while - 6
while - 7
while - 8
while - 9
var a2 = 0
do{
println("do while - $a2")
a2++
}while(a2<10)
do while - 0
do while - 1
do while - 2
do while - 3
do while - 4
do while - 5
do while - 6
do while - 7
do while - 8
do while - 9
do {
입력받기
출력하기
}while(입력값!=0)
반복문을 사용하는 것은 그냥 출력하는것보다 컴퓨터 자원을 더 많이 사용하게 됨
1일차 : 100원
2일차 : 400원
3일차 : 1600원
..
30일차 : 0000원
※ 출처 : 멋쟁이사자 앱스쿨 2기, 소프트캠퍼스