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

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

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

 

 

코드카타 문제풀이

역원소 정렬(Silver 5, 5648번, 마라톤)

문제 내용

 

문제 풀이 방법

첫 번째 입력이(N) 숫자의 개수이고 N개의 숫자가 공백과 줄 바꿈 되어 주어질 때, 입력받은 숫자들을 모두 거꾸로 뒤집은 값을 오름차순으로 정렬해 출력.

 

 

해결 코드(스포 주의)

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

fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
    var st = StringTokenizer(readLine())
    var num = st.nextToken().toInt()

    val array = Array(num) { 0L }

    while (num > 0) {
        if (st.hasMoreTokens()) {
            num--
            array[num] = st.nextToken().reversed().toLong()
        } else st = StringTokenizer(readLine())
    }

    array.sort()
    println(array.joinToString("\n"))
}

 

풀이 과정

입력 처리를 해주기 위해 첫 줄의 입력을 st로 불러오고 첫 번째 token값을 num으로 저장한다.

입력값을 저장하기 위한 Array도 size를 num으로 지정해서 생성해 준다.

그리고 num이 0이 될 때까지 반복해 준다.

 

만약 st에 받을 수 있는 값이 존재한다면(st.hasMoreTokens()) num을 하나 감소시키고 감소시킨 num을 index로 삼아서 array에 뒤집어서 int로 변환해서 저장해 준다.

위 조건을 만족하지 않으면 새롭게 입력을 다시 받아준다.

 

반복 종료 후 array를 sort 해서 jointoString으로 출력.

 

 

문제 해결 과정

입력을 정확히 받을 수 있어야 한다. 올바르게 입력받을 수 있으면 kotlin으로는 쉽게 구현 가능하다.

 

 

새로운 문자열 만들기(Silver 4, 30089번, 마라톤)

문제 내용

 

문제 풀이 방법

T개의 문자열이 주어질 때(X), X를 이용해 가장 짧은 팰린드롬을 구해서 출력.

 

 

해결 코드(스포 주의)

더보기
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) {
        val str = readLine()
        val reversedStr = str.reversed()
        var cutting = ""

        for (c in str.length - 1 downTo 0) {
            val subStr = str.substring(c, str.length)
            val subReversedStr = reversedStr.substring(0, str.length - c)

            if (subStr == subReversedStr) cutting = subReversedStr
        }

        println(str + reversedStr.substring(cutting.length, reversedStr.length))
    }
}

 

풀이 과정

문자의 개수를 나타내는 case를 입력받고 case만큼 반복해 준다.str로 문자열을 입력받고, str을 뒤집은 reservedStr를 생성하고, reservedStr에서 자를 문자열을 저장하는 cutting 변수를 생성한다.

 

str의 길이의 -1부터 시작해서 0까지 내려가는 for문으로 반복해 준다.str을 뒤에서 하나씩 늘어나도록 자른 문자열(subStr)을 생성해 준다(str: abcd일 때, subStr: d -> cd -> bcd).reversedStr를 0부터 str의 길이에서 c만큼 뺀 수만큼 자른 값을 저장하는 subReversedStr을 생성한다.subStr과 reversedStr이 서로 같으면 두 값을 겹쳐서 팰린드롬을 만들 수 있기 때문에 cutting에 subReversedStr을 넣어 준다.반복을 종료하면 cutting에 팰린드롬이 될 수 있는 가장 큰 문자열이 남게 될 것이다.입력값이 BANANA이면 cutting이 ANA도 될 수 있지만 최종적인 cutting은 ANANA가 된다.

 

변경된 cutting 데이터를 이용해 str에 reversedStr를 cutting의 length부터 끝까지의 값까지 잘라서 붙여주면 최소 길이의 팰린드롬이 된다.BANANA에 cutting이 ANANA이므로 BANANA를 뒤집은 값인 ANANAB에 ANANA를 제거해서 B만 남고, 이를 기존의 BANANA에 붙여주면 최소 길이의 팰린드롬인 BANANAB가 될 것이다.

 

 

문제 해결 과정

팰린드롬을 구하는 문제이다.

내가 쓴 방법이 팰린드롬을 구하는 정석 방법은 아니라고 생각한다. 더 효율적인 코드가 있을 것이다.

 

앱 개발 입문 팀 프로젝트 마무리

앱 오류사항 확인 및 해결

활동 내용 간단 정리

앱을 직접 돌려 보면서 수정해야 할 부분과 오류 사항들을 해결함.

약 6개의 수정, 오류사항을 해결함.

 

 

발표 자료 작성

활동 내용 간단 정리

팀원들이 의견을 모아서 발표 자료 PDF를 만들었고, 발표할 팀원에게 직접 대본을 작성해 전달해 주었다.

 


 

오늘 공부 내용 정리 및 회고

오늘부로 약 1주간의 팀 프로젝트 기간이 종료되었다.

제시간에 모두 끝내서 주말에 놀 수 있을 것 같다.

그렇다고 알고리즘 문제를 안 풀겠다는 건 아니다ㅎㅎ

728x90