전체 글 47

(Android Studio) - 레이아웃 종류와 쓰임새

1. Linear Layout : 컨테이너에 포함 된 뷰들을 수평 또는 수직으로 일렬 배치하는 레이아웃 : vertical (수직) / horizental (수평) : 오직 가로 또는 세로 한 방향으로만 가능 : 중첩 X : weight(가중치)를 줘서 비율에 맞게 조정 가능 2. Relative Layout : 뷰를 서로 간의 위치 관계나 컨테이너와의 위치 관계를 지정하여 배치 : 자식 View 위젯들이 서로 간의 상대적 배치 관계에 따라 화면에 표시 될 위치가 결정되도록 만들어줌 : A는 무조건 B 옆에 / C는 무조건 D 밑에 : parent를 기준으로도 할 수 있음 : 중첩 O 3. Table Layout : 계산기 같은 거 만들 때 쓰는 거고 자주 안 씀 4. Frame Layout : 컨테이너..

Android 2024.03.19

(Android Studio) 프로젝트 구조

안드로이드 스튜디오에서 새로운 프로젝트를 생성했을 때 그 구조에 대해서 알아보자 1. 매니페스트 파일 : 앱의 기본 특징 설명, 앱의 구성요소 (액티비티, 서비스 등)를 정의한 XML 파일 2. 리소스 폴더 - drawable: 이미지 리소스를 담는 파일 - layout: UI 구성에 필요한 XML 리소스 - mipmap: 앱 아이콘 이미지 - values: 문자열 등의 값으로 이용되는 리소스 (string.xml을 사용해야 하는 이유는 다국어 지원을 위해 필요하므로 xml 코드에 text 값을 하드코딩하는 것은 지양된다) ! 주의할 점 ! : res 하위의 폴더 이름은 지정된 이름을 사용해야 함 : 각 리소스 폴더에 다시 하위 폴더를 생성할 수 없음 : 리소스 파일 명에는 알파벳 대문자를 사용할 수 없..

Android 2024.03.18

(Kotlin) - 이상한 문자 만들기

처음에 이 문제를 이해한 방식은 인덱스를 정수로 가져와서 2로 나누었을 때 나누어 떨어지지 않으면 홀수로 판단하고 대문자로 출력하게끔 코드를 짰다. class Solution { fun solution(s: String): String { var answer = "" val chars = s.split(" ") for(i in chars) { var change = "" for(j in i.indices) { change += if (j % 2 == 0) i[j].toUpperCase() else i[j].toLowerCase() } answer += "$change " } return answer.trim() } } ㄴ> 위와 같은 방식으로 테스트 케이스를 돌렸을 때 실패인 경우가 절반 정도 뜨길래 문..

Kotlin - object를 이용한 싱글톤 객체 생성

[ 싱글톤 객체 ] - 애플리케이션 전역에서 하나의 인스턴스만 생성되는 객체를 말하며 클래스의 인스턴스를 여러 번 생성하지 않고 한 번만 생성하여 공유함으로써 자원의 낭비를 줄이고 일관된 상태를 유지할 수 있도록 한다. - Kotlin에서 싱글톤 객체는 'object' 키워드를 사용하여 정의되며 클래스 선언과 객체의 생성을 동시에 수행하며 싱글톤 객체는 클래스 내부의 프로퍼티 및 메서드를 정의할 수 있다. object ShoppingCart { private val items = mutableListOf() private var userMoney = 0 // 사용자 잔액 fun initMoney(money: Int) { userMoney = money } fun addItem(item: MenuItem)..

Kotlin - 비동기 프로그래밍 (쓰레드, 코루틴)

비동기 프로그래밍이란? : 여러가지 로직들이 완료 여부와 관계 없이 실행되는 방식 (쉽게 설명하면 정해진 순서 없이 동시에 수행) 동기 프로그래밍 : 요청을 보낸 로직이 완료되어 결과값을 받을 때까지 다음 작업은 멈춘 상태로 기다림 쓰레드(Thread) : 로직을 동시에 실행할 수 있도록 돕는 것이 목적이다. 프로그램은 하나의 main 쓰레드가 존재하며 별도의 자식 쓰레드를 thread 키워드로 생성 가능하다. : 동시성 보장 수단: Context Switching, 운영체제 커널에 의해 동시성 보장 / 작업 단위 = Thread / 각 Thread가 독립적인 Stack 메모리를 가짐 : 블로킹(Blocking) : Thread A 가 Thread B 의 결과를 기다리고 있으면 A는 블로킹 상태며 B의 ..

Git & Github 협업 활용 정리

~ 브랜치 생성 명령어 ~ git branch login -> git branch : login 이라는 브랜치를 생성 ( * 표시 붙은 게 현재 브랜치라는 뜻, (END)가 뜨면 q로 나가면 됨) ~ 브랜치 이동 명령어 ~ git switch login : 현재 브랜치 위치가 main에서 login으로 이동됨 git branch : 브랜치 위치가 어디에 있는지 확인 가능한 명령어 git checkout login : switch와 같은 기능 git switch -c 브랜치이름 (= git checkout -b 브랜치이름) : 브랜치를 생성하는 것과 동시에 이동도 함 ~ 브랜치 합치는 명령어 ~ git switch 최종 브랜치 이름(ex: main) git merge 합치고 싶은 브랜치 이름(ex: log..

Git 2024.03.11

(Kotlin) 나누어 떨어지는 숫자

주어진 배열 안의 원소가 주어진 divisor로 나누었을 때 나누어 떨어지는 원소만 따로 배열에 담아 return 해야 하는 문제고 이 문제는 어려운 문제는 아니지만 isNotEmpty() 함수를 처음 사용해 보는 것이기 때문에 기록한다. class Solution { fun solution(arr: IntArray, divisor: Int): IntArray { var resArr = mutableListOf() for(i in arr.indices) { if(arr[i] % divisor == 0) { resArr.add(arr[i]) } } resArr.sort() if(resArr.isNotEmpty()) { return resArr.toIntArray() } else { return intArr..

(Kotlin) 정수 제곱근 판별

먼저 Kotlin에서 제곱식을 구현하려면 pow라는 함수를 사용해야 하는데 이는 Kotlin의 math 라이브러리에 존재한다. 따라서 math 라이브러리를 import 한다. import kotlin.math.* class Solution { fun solution(n: Long): Long { var sqrt = sqrt(n.toDouble()) return if(sqrt % 1.0 == 0.0) { // 제곱근 판별 (sqrt + 1).pow(2.0).toLong() } else { -1L } } } [ Kotlin 함수 간단 정리 ] - pow() : 인자를 받아 제곱 연산을 수행하며 Int를 인자로 받을 수 있으나 반환 자료형은 Double이다. (sqrt + 1).pow(2.0).toLong()..

(Kotlin) 하샤드 수 구하기

[ 하샤드 수의 조건 ] - 양의 정수 x의 자릿수의 합이 정수 x로 나누어 떨어져야 함. ex) x = 18 -> 1 + 8 = 9 -> 18 / 9 = 2 로 나누어 떨어짐. 따라서 x는 하샤드 수이다. class Solution { fun solution(x: Int): Boolean { var answer = true var xStr = x.toString() var Sum = xStr.map { it.toString().toInt() }.sum() // map 함수를 사용해 x를 문자열로 변환하여 각 자릿수를 떼서 리스트에 담고 다시 정수로 // 변환하고 sum() 을 통해 정수 리스트의 합계를 계산 (정수 리스트면 반환형도 정수) return x % Sum == 0 } } [ Kotlin 메소..

(Kotlin) 프로그래머스 문제 설명의 제한 조건 의미

이 문제를 풀기 전 나는 여태까지 제한 조건이 내가 걸러내야 하는 조건인 줄 알고 코드를 짤 때 계속 제한 조건에 맞는 조건문을 작성했다. class Solution { fun solution(s: String): Int { var answer = 0 var currentNumber = 0 var currentSign = 1 if (s[0] != '0') { if (s[0] == '-') { currentSign = -1 } else if (s[0] == '+') { currentSign = 1 } else { val digit = s[0].toString().toInt() currentNumber = digit } for (i in 1 until s.length) { val digit = s[i].to..