암호 해독 코틀린(Kotlin)
이번 문제는 이름이 흥미로워서 선택해보았다. 문제 cipher라는 문자열이 주어지고 code라는 정수가 주어지는데 간단히 for문을 사용해 code만큼의 step을 주면 되겠다! 생각했다. 풀이 여기서 평소와 다르게 for문의 시작 인덱스가 code - 1인데, 이는 무조건 cipher의 0번 인덱스의 값은 가져오면 안되기 때문이다. 실행 결과
이번 문제는 이름이 흥미로워서 선택해보았다. 문제 cipher라는 문자열이 주어지고 code라는 정수가 주어지는데 간단히 for문을 사용해 code만큼의 step을 주면 되겠다! 생각했다. 풀이 여기서 평소와 다르게 for문의 시작 인덱스가 code - 1인데, 이는 무조건 cipher의 0번 인덱스의 값은 가져오면 안되기 때문이다. 실행 결과
오늘도 코틀린 몸풀기용 문제를 하나 풀었다. 요즘 코틀린 공부를 책을 통해 하고 있는데 자바와 비교해서 하다보니 생각보다 쉽지 않은 언어같다. 문제 s1과 s2에 같은 원소가 있다면 result값을 1씩 증가시키면 되는 문제였는데, 가장 큰 고려사항은 s1과 s2가 중복된 원소가 있는 지였다. 그런데 제한사항에서 중복된 원소는 없다고 했으므로 각 원소의 중복 여부는 1번만 체크될 것이다. 예를 들어, "a"가 s1에 있고 s2에 "a"라는 원소가 있다면 무조건 "a"의 중복 횟수는 1번이다. 그래서 아주 마음 편하게 중첩 for문을 사용해 문제를 풀어보았다. 풀이 s1의 각 원소가 s2에 있는 지 확인하는 코드이다. 만약 s1의 원소가 s2에 있다면 리턴될 answer 변수에 1을 더한다. 실행 결과
이번 문제는 문자열 안의 숫자를 찾아 모두 더하는 문제이다. 문제 밑에 살짝 잘린 유의사항이 있는데 연속된 숫자도 한 자리 숫자로 취급한다고 한다. 내가 이 문제를 푼 방식은 문자열의 인덱스마다 문자를 정수로 형변환하고 그 값을 더해 리턴하는 것이었다. 그런데 만약 정수로 형변환할 인덱스의 문자가 정수형이 아니라면? 당연히 에러가 날 것이다. 형변환이 불가능하다고.. 그럼 어떻게 해야할까.. 나는 try-catch를 사용했다. 만약 형변환을 하는데 에러가 발생하면 그냥 반복문을 continue하도록 처리했다. 풀이 그리고 다시 Char to Int의 형변환을 알아보았는데 나는 전에 Character.getNumericValue()를 사용했었다. 하지만, 위의 메소드는 코틀린 버전이 낮을 때(1.5 이전)..
오늘도 코틀린 문법을 기억하기 위해 문제를 풀어보았다. 문제 문제를 보자마자 코틀린의 when을 사용하면 쉽게 풀 수 있겠다는 생각이 들었다. 다만 price가 Int형으로 주어지기 때문에 할인을 한 가격이 소수점이 나올 경우가 있어 계산된 값을 형 변환해주어야 했다. 풀이 처음엔 범위 연산을 until을 사용하지 않고 ..을 사용해 299999, 499999로 문제를 풀었는데 숫자가 보기 싫어서 until로 다시바꿔 풀어보았다. else -> answer = price.toDouble() else에서도 위처럼 문제를 풀었는데 굳이 메소드를 호출해 형변환하는 것이 불필요하다 생각해 곧바로 주어진 price를 리턴하는 것으로 바꿔보았다. 실행 결과
이번에 액티비티가 두 개 있는 정말 간단한 앱을 업데이트하면서 기존 Java로 작성된 파일을 Kotlin 변환 기능을 사용해 변경했다. 그리고 아무 생각없이 스토어에 업데이트를 올렸는데 내가 테스트해보니 이게 웬걸.. 그냥 실행조차 되지 않았다. 그래서 에러 로그를 보니 처음보는 에러가 있었다. 무슨 일일까 검색해보았다. 대부분 매니페스트에 액티비티가 등록되지 않은 경우가 많았는데 나는 이 경우일수는 없었다. 결국 여러 상황을 찾아보니 또 Gradle 문제였다. 프로젝트 수준의 build.gradle에서는 코틀린 플러그인이 제대로 추가되어있었는데, 모듈 수준의 build.gradle에서는 플러그인이 추가되어있지 않아서 .kt 확장자인 액티비티를 인식하지 못한 것이었다. 나처럼 무작정 Java to Kot..
나는 오늘도 코틀린을 까먹지 않기 위해 간단한 문제를 풀었다. (회사에서는 자바 쓰는 중이라..) 문제 일단 리턴될 배열은 무조건 길이가 2이다. 그리고 0번 인덱스에는 최댓값, 1번 인덱스에는 해당 인덱스 값을 넣어주어야 한다. 최댓값 구하는 방식은 너무 유명해서 다들 알고 있을 것 같다. 갖고 있는 값과 비교해 새로운 값이 더 크면 기존 변수 값에 대입하는 방식이다. 풀이 실행 결과 이번 문제가 프로그래머스에서 푼 문제 중에 테스트 케이스가 가장 적은 문제였던 것 같다 ㅋㅋ
오늘은 코딩테스트 입문 단계 중 그나마 난이도가 있어보이는 문제를 골라서 풀어보았다. 문제 문제 설명만 읽어봐서는 배열을 회전시킨다는 의미를 이해하지 못했는데 direction과 입출력 예시를 보고 의미를 파악했다. direction이 left이면 배열을 그대로 한 칸 왼쪽으로 밀면 되고, right이면 오른쪽으로 밀면 되는 것이었다. 풀이 가장 먼저 리턴될 배열의 크기를 정해주었다. 다른 문제를 풀 때도 배열의 크기를 정하는 게 은근 귀찮은 부분이었는데 위의 입출력 예를 보니 direction이 right이면 리턴될 배열의 첫 칸이 주어진 배열의 마지막 원소였다. 반대로 direction이 left일 때, 리턴될 배열의 마지막 칸이 주어진 배열의 첫 원소였다. 그래서 각 상황마다 처음 혹은 마지막 원소..
오늘은 또 새로 나온 것같은 문제를 하나 풀어보았다. 근데 계속 코딩테스트 입문 단계의 문제가 추가되면 이거 언제 다 풀고 넘어가지?ㅋㅋ 문제 문제는 간단하다. 소문자를 대문자로, 대문자를 소문자로 바꾼 String를 리턴해주면 된다. 전에 문제를 풀면서 썼던 메소드가 기억났다. 전에 toUpperCase(), toLowerCase()를 사용하려 했는데 Deprecated됐던 기억이 있다. 다시 찾아보니 그냥 uppercase(), lowercase() 메소드를 사용하면 됐다. 그런데 무작정 두 메소드를 쓰면 안되니 조건문을 통해 대소문자를 구분해주었다. 있을법한 이름으로 코틀린 공식 사이트에 검색하니.. 역시 나의 기대를 저버리지 않았다 ㅋㅋ isUpperCase()는 Char가 대문자이면 true를 ..
이번 문제는 시작 값에 계속 2를 곱하면 되는 문제였다. 문제 풀이 주어진 n을 answer에 대입해두고 그 값을 t까지 2씩 곱했다. 실행 결과
이번에는 간단한 수학 문제(?)를 하나 풀어보았다. (물론 내가 계산 안 함) 문제 주어진 수의 제곱근이 자연수이면 1, 아니면 2를 리턴하는 문제였다. 나는 제곱근이 자연수인지 판단하는 방식으로 제곱근을 Double형으로 받아와 1로 나눈 나머지가 0일 때를 사용했다. 풀이 다른 문제들과 다르게 import 문이 들어있는데 이를 명시해주지 않으면 프로그래머스에서 sqrt가 어떤 메소드인지 모른다. 그리고, sqrt의 인자는 double형 또는 float형을 주어야 했기에 가장 자주 쓰는 double형으로 변환해 주었다. 실행 결과를 보고 '역시 컴퓨터는 연산을 하기 위한 장치였지?' 라는 생각을 다시금 하게 되었다.