오늘 공부한 내용 정리(2024년 5월 8일)
1. 코드카타(프로그래머스) 문제 풀이.
A. 시저 암호
문제 내용
문제 풀이 방법
- s라는 문자열을 받아오면 각 문자들을 for문으로 받아와 n만큼 더한 값을 반환하기.
- 공백의 경우에는 answer에 공백을 추가해 주고 continue를 돌려서 넘김.
해결 코드(스포 주의)
더보기
fun solution(s: String, n: Int): String {
var answer = ""
val aInt = 97
val AInt = 65
// A = 65, a = 97
// Z = 90, z = 122
// s를 char로 나눠서 n만큼 이동된 값을 구하기.
// char + n이 z값(122, 90)을 넘어가면? 다시 A, a부터 시작.
for (char in s) {
val charToInt = char.toInt()
// 공백의 경우(32) 공백만 따로 추가해주기.
if (charToInt == 32) {
answer += " "
continue
}
// char가 대문자인 경우
if (char.isUpperCase()) {
// 대문자 char가 Z값을 넘어감.
if (charToInt + n > 90) {
val plusValue = charToInt + n - 90
// Z -> A로 한 번 움직이면 1이 소모되야 하기에 -1을 추가해주기.
answer += (AInt + plusValue - 1).toChar()
} else answer += (charToInt + n).toChar()
}
// char가 소문자인 경우
else {
// 소문자 char가 z값을 넘어감.
if (charToInt + n > 122) {
println(charToInt + n)
val plusValue = charToInt + n - 122
// z -> a로 한 번 움직이면 1이 소모되야 하기에 -1을 추가해주기.
answer += (aInt + plusValue - 1).toChar()
} else answer += (charToInt + n).toChar()
}
}
return answer
}
풀이 과정
- String을 target으로 삼아서 for문을 돌리면 각각의 문자들은 Char 타입을 가지게 된다.
Hello -> 'H', 'e', 'l', 'l', 'o' - 문자(char)를 toInt()를 이용해 int형으로 변환하면 아스키코드 값이 나오게 됨.
아스키코드표 - A(65), a(97), Z(90), z(122)인 것을 이용해 Char를 Int로 변환한 아스키코드값으로 판단해 보기.
- char 데이터가 대문자인지 체크하기 위해 isUpperCase()를 사용함. Boolean을 return 하기 때문에 추가 코드 없이 if문에 다이렉트로 작성 가능함.
if (char.isUpperCase) {}
- char에서 n을 더한 값이 Z(z)의 아스키코드값(90, 122) 보다 클 경우 z를 초과한다는 뜻이기 때문에 A(a)부터 다시 시작해야 하기 때문에 얼마나 초과되었는지 알 수 있는 변수를 추가함(plusValue 변수).
plusValue 변수의 값만큼 시작값(aInt, AInt 변수)에서 더해주기.
Z(z) -> A(a)로 움직이는 데 이동 1을 소모해야 하기 때문에 answer에는 plusValue의 -1 만큼 뺀 값을 넣어주기.
(빼지 않으면 plusValue가 3일 때 char가 z라면 (z -> a) -> b -> c -> d 순서가 되기 때문) - 공백(32)이 걸렸을 때만 " "을 answer에 추가해 주고 continue를 해준다(아래의 if 코드가 작동하면 안 되기 때문).
B. 3진법 뒤집기.
문제 내용
문제 풀이 방법
- n을 3진법으로 변환하기
- 변환된 n을 좌우반전시키기.
- 좌우반전된 n을 다시 10진법으로 표현해서 return 하기.
해결 코드(스포 주의)
더보기
fun solution(n: Int): Int {
var answer: Int = 0
// n을 3진법으로 변환 후, 좌우반전을 시키고 10진법으로 재변환.
val n3String = n.toString(3) // n을 3진법을 적용한 String으로 변환.
// val reversedInt = n3String.reversed().toInt(3) // n3String을 reversed(좌우반전) 후(10진법 으로 변경됨.) int 3진법으로 변경
// answer = reversedInt.toString(10).toInt() // 3진법 int를 10진법 String으로 변경 후, 다시 int로 변경.
// 좌우반전하고 3진법으로 변환해서 출력
// 이유: 10진법으로 바꿔도 똑같은 값이 나올 것이기 때문에 불필요한 코드를 줄임.
answer = n3String.reversed().toInt(3)
return answer
}
풀이 과정
- 진법을 변환하기 위해서는 toString(), toInt()의 파라미터에 자신이 원하는 진법을 표기해주어야 한다.
3진법 String으로 변환하고자 하면 toString(3). - n을 3진법 String으로 변환해 준다.
같은 타입끼리의 진법 변환은 되지 않음(String -> String n진법, Int -> Int n진법).
val n3String = n.toString(3)
- reversed()를 이용해 String 타입 데이터를 좌우반전시킬 수 있음.
- 반전된 n3String을 다시 3진법 Int로 변경해 줌.
reversed()를 사용하면 10진법 String으로 자동으로 변경되기 때문이다. - 3진법 Int로 변경한 반전된 n3String을 return 해줌.
10진법으로 변환하지 않고 return 한 이유는 10진법은 평범하게 출력하는 것과 같기 때문에(toInt(10)와 toInt()가 같음) 변환 코드는 생략함.
2. 스파르타 코딩 클럽 강의 수강(1-2, 1-3)
A. BMI 계산기(메인화면, 1 - 2)
강의내용 간단 정리
- BMI 계산기의 초기 화면(키 몸무게 입력 화면)의 디자인을 함.
- split과 code 화면을 이용해 xml 코드를 작성하는 방법을 공부함.
B. BMI 계산기(결과화면, 1 - 3)
강의내용 간단 정리
- BMI 계산기의 결과 화면의 디자인을 함.
- Button, Image 같은 자주 사용하는 View들의 사용법을 익히고 xml의 View에 id를 부여하는 방법을 공부함.
간단 정리
- 공부일지에는 일과 시간(사전캠프: 14:00 ~ 18:00, 본캠프 09:00 ~ 21:00)에 했던 일들을 작성하겠다.
- 프로그래머스 풀이를 하면서 처음 알게 되는 개념(toString, toInt를 이용한 진법 변환)을 알게 되었다.
- BMI 계산기 강의 과정은 이전에 다 공부했던 개념이지만, 성실하게 챙겨볼 생각이다.
728x90
'♞ | 공부일지 > ♝ | TIL' 카테고리의 다른 글
[Android, 내일배움캠프] 공부일지(2024-05-13) (0) | 2024.05.13 |
---|---|
[Android, 내일배움캠프] 공부일지(2024-05-12) (0) | 2024.05.12 |
[Android, 내일배움캠프] 공부일지(2024-05-11) (0) | 2024.05.11 |
[Android, 내일배움캠프] 공부일지(2024-05-10) (0) | 2024.05.10 |
[Android, 내일배움캠프] 공부일지(2024-05-09) (0) | 2024.05.09 |