본문 바로가기
♞ | 공부일지/♝ | TIL

[Android, 내일배움캠프] 공부일지(2024-07-03)

by immgga 2024. 7. 3.
오늘 공부한 내용 정리(2024년 7월 3일)

 

 

코드카타 문제풀이

삼각 무늬 1(Bronze 3, 11320번, 마라톤)

문제 내용

 

문제 풀이 방법

두 정삼각형의 길이 A, B가 주어지고, 한 변의 길이가 A인 정삼각형을 한 변이 B인 정삼각형을 몇 개를 사용해야 완전히 덮을 수 있는지 출력.

 

 

해결 코드(스포 주의)

더보기
import java.io.BufferedReader
import java.io.InputStreamReader

fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
    val case = readLine().toInt()

    for (i in 0 until case) {
        var increaseValue = 1
        var result = 0
        val (equilateralTriangleA, equilateralTriangleB) = readLine().split(" ").map { it.toInt() }
        val height = equilateralTriangleA / equilateralTriangleB

        for (j in 1..height) {
            result += increaseValue
            increaseValue += 2
        }

        if (equilateralTriangleA % equilateralTriangleB != 0) result += increaseValue

        println(result)
    }
}

 

풀이 과정

case만큼 반복하면서 증가값을 1로 초기화한 변수 increaseValue를 생성한다.

그다음 정삼각형 A, B의 변의 길이를 입력받을 equilateralTriangleA, equilateralTriangleB를 생성한다.

그리고 height 변수를 생성해 줬는데, height에서 equilateralTriangleA / equilateralTriangleB 값이 반복시킬 값이 된다.

큰 삼각형에 작은 삼각형을 채우려면 다음과 같이 채울 수 있다.

큰 삼각형(변의 길이: 6)에 작은 삼각형(변의 길이: 1)이 모두 채워져 있다.

처음에는 1개로 시작하다가 밑으로 갈수록 바로 윗줄의 삼각형의 개수 + 2 만큼 삼각형이 필요해진다.

이 규칙을 이용할 것이다.

다시 돌아와서 height는 A의 변의 길이와 B의 변의 길이를 나눈 값이다.

이 값만큼 정삼각형 B를 구성하면 A를 최소의 개수를 채울 수 있게 된다.

그래서 height만큼 반복해서 result에 increaseValue를 더해주고, increaseValue를 2를 더해준다.

 

그리고 반복문이 종료된 후,

정삼각형 A의 변의 길이와 B의 변의 길이를 나눈 나머지가 존재한다면 그 부분까지 채워 줘야 완전히 A를 채울 수 있기 때문에 마지막으로 result에 increaseValue를 더해준다.

 

 

문제 해결 과정

B의 변의 길이를 이용해 최소의 개수를 구해야 하는 문제이다. 1로 가정하고 모두 더해버리면 틀린 값이 된다.

 

 

버그왕(Bronze 1, 3447번, 마라톤)

문제 내용

 

문제 풀이 방법

BUG 문자열이 포함된 문자를 입력받을 때, BUG 문자열을 모두 제거한 상태의 코드를 출력.

 

 

해결 코드(스포 주의)

더보기
import java.io.BufferedReader
import java.io.InputStreamReader

fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
    val string = mutableListOf<String>()

    while (true) {
        val str = readLine() ?: break
        string.add(str)
    }

    for (i in string.indices) {
        while (true) {
            val replaceValue = string[i].replace("BUG", "")

            if (replaceValue == string[i]) break
            else string[i] = replaceValue
        }

        println(string[i])
    }
}

 

풀이 과정

전체 string을 입력받고 부분별로 저장할 string mutableList를 생성한다.

무한 반복문 안에서 str로 한 줄을 입력받고 string list에 추가해 준다. 여기에는 공백까지 같이 들어가게 된다.

 

string의 size만큼 반복을 시켜 입력받은 값에서 BUG 문자열을 BUG가 존재하지 않을 때까지 지워야 한다.

그러기 위해 무한 반복문에 기존 string에 BUG 문자열을 replace 한 replaceValue를 생성하고, replaceValue가 string의 데이터와 같으면 BUG가 없다는 뜻이 되기 때문에 break를 해주고 그렇지 않은 경우에는 string[i]에 적용해 준다.

 

 

문제 해결 과정

연속해서 replace를 사용하면 되는 문제이다.

한 번만 replace를 사용하면 틀리게 된다.

 

 

수준별 학습반 2주 차

액티비티

활동 내용 간단 정리

Android ActivityActivity: 앱의 기초 화면

 

Activity의 lifecycle

lifecycle 함수를 쓰는 이유:

다른 Activity와의 switching과 화면 회전 시 사용자의 경험을 향상하고 시스템 자원을 절약하기 위함.

 

테스트 앱을 만들어 보면서 라이프사이클 함수를 호출해 봄.

 

Android Intent

intent: 사전적 의미로는 의도와 목적임. Activity 간의 상호 작용, 커뮤니케이션을 위한 메시지 시스템.

intent는 실행할 작업의 유형과 데이터를 포함할 수 있다.

주로 앱 내부에서 다른 Activity를 호출하는 데 사용된다.

 

암시적 Intent(Implicit Intent)

특정 작업을 수행할 수 있는 모든 앱에 전송한다.
웹 페이지를 열거나, 이메일을 보내거나, 연락처를 공유할 때 사용한다.

 

명시적 Intent

내 애플리케이션 내의 Activity와의 화면 전환을 이용할 때 사용.

 

intent에서 putExtra를 쓸 때, key값을 const를 이용해 상수로 저장해서 사용하는 것이 내 실수로 인한 오류가 나지 않는다.

 

 

개인 공부

앱 개발 입문 팀 프로젝트 개발

마이 페이지 기능 구현

마이 페이지와 메인, 디테일 페이지에서 사용할 메뉴 정보를 담은 리스트를 object로 생성해 주었음.

마이 페이지의 기능 구현을 완료함.

아직 메뉴 설명은 없지만 내일 추가해 줄 예정이다.

 


 

오늘 공부 내용 정리 및 회고

팀 프로젝트의 기능 구현을 완료했다.

내일은 추가 기능과 디테일한 부분을 잡아줄 생각이다.

 

알고리즘 공부는 꾸준히 하고 있다. 하루에 1문제 이상 풀기 위해 쉬운 문제라고 하나 이상은 풀 생각이다.

728x90