[Android/Flutter 교육] 4일차

MSU·2023년 12월 29일

Android-Flutter

목록 보기
4/85
post-thumbnail

※ 키워드도 식별자로 사용이 가능하다
백틱(`)으로 감싸주면 키워드가 아닌 식별자로 사용할 수 있다.
ex) 코틀린에서는 in이 키워드라서 System.in이 아니라 System.`in`으로 사용하고 있음
나중에 자바코드로 변환되는 과정때문에 권장하진 않음

연습 사이트로 백준(https://www.acmicpc.net/) 추천


3일차 마지막 시간에 숙제를 내줌

오전에는 숙제 문제 풀이

복습 방법

  1. 완성본 코드에 주석을 지우고 직접 주석을 달아보기
  2. 주석을 단 후에는 코드를 지우고 직접 코드를 작성해보기
  3. 마지막에는 문제만 남기고 모두 지운 후 직접 문제 풀어보기

문제 풀이

  • step별로 절차를 나누어 차근차근 풀어준다
  • 주석으로 기능 정리
  • 기능 별 함수 구현
  • 구현한 함수 테스트
  • main 함수에서 호출

문제 1)

키보드로 부터 입력을 받아 짝수라면 "짝수입니다"를 출력하고 홀수라면 "홀수입니다"를 출력한다.

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
홀수 입니다

문제 2)

주민등록 번호를 입력받아 다음과 같이 출력한다.

주민등록 번호는 - 없이 13자리의 숫자를 입력받는다.
처음 두자리는 생년을 의미한다.
세번째 네번째는 생월을 의미한다.
다섯번째 여섯번째는 생일을 의미한다.
일곱번째 숫자는 다음과 같다.
9 : 1800년대생 남성
0 : 1800년대생 여성
1 : 1900년대생 남성
2 : 1900년대생 여성
3 : 2000년대생 남성
4 : 2000년대생 여성
5 : 1900년대생 외국인 남성
6 : 1900년대생 외국인 여성
7 : 2000년대생 외국인 남성
8 : 2000년대생 외국인 여성

출력은 다음과 같이 한다
1999년 10월 21에 태어난 남성입니다

기능 정리

  1. 주민등록 번호를 입력받는 기능
  2. 생년을 추출한다.
  3. 생월을 추출한다.
  4. 생일을 추출한다.
  5. 일곱번째 숫자를 추출한다.
  6. 몇년대 생인지를 파악한다.
  7. 성별을 파악한다.
  8. 출력한다.

구현 결과

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]
  • downTostep을 설정하면 감소 폭을 설정할 수 있다.
println((10 downTo 1 step 2).toList())
[10, 8, 6, 4, 2]

For문

  • 데이터를 관리하는 요소를 통해 반복한다.
  • 반복 횟수가 결정되어 있을 때는 반복 횟수만큼의 데이터를 가진 요소를 통해 반복한다.
  • 최소와 최대 범위가 결정되어 있다면 결정되어 있는 최소와 최대 범위의 값을 가진 요소를 만들어 반복한다.
// 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

while문

  • 주어진 조건식이 true인 경우에 관리하는 코드를 반복한다.
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

do while문

  • 주어진 조건식이 true인 경우에 관리하는 코드를 반복한다.
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문은 조건을 마지막에 체크하기때문에 처음 한번은 무조건 수행된다.
  • 사용자 입력을 받을 때 활용하기 좋음
do {
	입력받기
    출력하기
}while(입력값!=0)

while과 do while의 차이

  • while문은 조건식이 상단에 있고 do while은 하단에 있다.
  • 이 때문에 조건식이 처음부터 거짓이라면 while문은 한번도 수행되지 않고
    do while은 한번은 수행된다.
  • 조건식에 들어가는 변수의 값이 사전에 결정되어 있다면 -> while문
  • 조건식에 들어가는 변수의 값을 반복문 안에서 결정하고 있다면 -> do while문


반복문을 사용하는 것과 그냥 반복문 없이 하는 것의 차이

반복문을 사용하는 것은 그냥 출력하는것보다 컴퓨터 자원을 더 많이 사용하게 됨



반복문 연습문제

문제4

EX04) 안녕하세요를 10번 출력하세요

문제5

EX05) 1부터 100까지의 총합을 출력하세요

문제6

EX06) 1부터 100까지의 홀수의 합을 출력하세요

문제7

EX07) 사용자에게 정수를 입력받고 1 부터 입력 받은 숫자까지의 총합을 구한다

문제8

EX08) 사용자에게 정수를 입력받아 누적한다. 사용자가 0을 입력하면 입력을 중단하고 그때까지의 총합을 출력한다.

문제9

EX09) 1부터 1씩 증가시키는 값 중 3의 배수이거나 7의 배수인 숫자를 누적한다. 누적값이 10000이상이 됬을 때의 숫자가 몇인지 출력한다.

문제10

EX10) 철수가 저금을 한다. 첫날 100원을 저금한다. 두번째 날 부터는 전날 잔고액의 3배를 저금한다. 1일차 부터 30일차까지의 통장 잔고액을 모두 출력한다. 조건 : 변수는 Int 타입의 변수만 사용한다.

1일차 : 100원
2일차 : 400원
3일차 : 1600원
..
30일차 : 0000원



※ 출처 : 멋쟁이사자 앱스쿨 2기, 소프트캠퍼스 
profile
안드로이드공부

0개의 댓글