728x90

전체 글 119

kotlin 프로그래머스 lv1 수박수박수박수박수박수?

문제를 보자마자 반복되는 패턴이어서 StringBuilder로 n을 입력받아서 문자를 더해나가면 되겠다는 생각이 들었다. n은 매개변수로 주어지지만 "수" "박"은 주어지지 않아서 직접 변수에 저장했다. 그 후 repeat문을 사용해서 반복해가며 문자를 append 했다. 코드작성은 아래와 같다. 생각보다 빨리 풀어서 좋았다.

kotlin 프로그래머스 lv1 제일 작은 수 제거하기

문제에서 제한조건을 보자마자 인덱스가 다르면 요소의 값이 같지 않다는 부분에서 중복이 안되는 배열이라는점을 인지했고, 가장 작은수를 제거한다는점에서 리스트가 가공이가능해야 문제를 풀수 있다는 생각을 했다. class Solution { fun solution(arr: IntArray): IntArray { return answer } } 문제에서 매개변수 arr는 가변배열이 아닌 배열이어서 저 배열을 mutable로 바꿔야겠다고 생각했다. 그래서 toMutableList()함수를 이용해서 타입을 변형했고, 문제에서 배열의 길이가 1이하면 -1 을 리턴하라고 그래서 아래와 같이 코드를 작성했다. 결과적으로 성공했고 else 부분에서 잠시 intArrayOf()에 add를하여 에러가 났었다. 그래서 다시 정..

kotlin 프로그래머스 lv1. 없는 숫자 더하기

문제를보자마자 비교해야하는 숫자와 배열의 길이가 달라서 numbers배열을 string으로 바꿀 생각을 했다. 또한 빠진수가 있는지 0에서부터 9의 숫자와 비교해야하는데 길이뿐아니라 타입도 달라서 아래와 같이 작성했다. 빠진수가 있으면 비교해서 answer에 저장하기위해 아래와 같이 작성했다. 결과적으로 성공하였다.

프로그래머스 lv1. 핸드폰 번호 가리기

문제를 보고서 phone_number의 길이에서 마지막4숫자를 제외한 나머지 부분을 따로떼서 나머지 4자리를 붙일지 아니면 바로 for문을 돌려서 앞에 숫자들은 별처리를 하고 나머지 숫자만 나오게끔 할지 고민했다. 전자의 방법을 쓰면 subString을 이용하면 될것 같았다. 하지만 return은 answer로 고정이 되어있어서 그냥 for문을 돌렸다. 내가 작성한 코드는 이렇다. phone_number는 스트링하나로 묶여있는 형태이기때문에 for문을 돌려서 각각의 요소들을 처리하려면 쪼개야했다. 그래서 split함수를 사용해서 각각 쪼개고 for문을 돌렸다. 잠시 list로 만들려는 착각을해서 얼릉 주석처리를하고 string그대로 for문을 돌렸다. 처음에 뒤에 4자리만 살려두는건데 문제를 잘못읽어서 ..

프로그래머스 lv1 나누어 떨어지는 숫자 배열

문제를보면 arr가 주어지고 각각의 요소를 dividor로 나누어서 나눠 떨어지면 return을 IntArray 형태로하는데 오름차순으로하면되고 나누어떨어지는 요소가 없다면 배열에 -1을 담어서 리턴하는 문제이다. 나는 코드를 간결하게 작성하기위해 코드를 아래와 같이 작성했다. 여기서 filter를 이용하면 리턴되는 값들이 true인 값만 나타낼수 있다.

프로그래머스 lv1 콜라츠 추측

문제를보자마자 입력받은 숫자가 나눠지고 곱해지고.. 변형이 되어서 숫자를 변형될때마다 저장하는 변수가 필요하다는 생각이 들었다. 그래서 currentNum 이라는 변수에 매개변수 num을 저장하게끔 처음부터 초기화했다. 하지만 코드를 다 작성해도 3개중 2개만 통과된다. 계속해서 마지막것은 실행이 되지않아 다른사람들의 코드를 참조했다. class Solution { fun solution(num: Int): Int { var longNum = num.toLong() var count = 0 while (count 1) { count ++ longNum = if (longNum % 2 == 0L) longNum / 2 else longNum * 3 + 1 } return if (count == 500) -..

프로그래머스 lv1 두 정수 사이의 합

문제를 보자마자 바로 if문을 통해 분기해야겠다는 생각을했다. class Solution { fun solution(a: Int, b: Int): Long { var answer = 0 if (a == b) { answer = a } else if (a b) { for (i in a downTo b) { answer += i } } return answer.toLong() } } 코드는 이렇게 작성했고, 여기서 downTo를 잠시 까먹어서 step -2로 지정하여 에러가 났당 ㅎㄷㄷ 그래서 다시 시도해 보니 다행히도 성공했다 return은 Long타입으로 바뀌어야해서 기존에 Int 타입을 toLong()을 이용하여 형변환했다.

프로그래머스 lv1 두 정수 사이의 합

문제를 보자마자 바로 if문을 통해 분기해야겠다는 생각을했다. class Solution { fun solution(a: Int, b: Int): Long { var answer = 0 if (a == b) { answer = a } else if (a b) { for (i in a downTo b) { answer += i } } return answer.toLong() } } 코드는 이렇게 작성했고, 여기서 downTo를 잠시 까먹어서 step -2로 지정하여 에러가 났당 ㅎㄷㄷ 그래서 다시 시도해 보니 다행히도 성공했다 return은 Long타입으로 바뀌어야해서 기존에 Int 타입을 toLong()을 이용하여 형변환했다.

프로그래머스 lv1 정수 내림차순으로 배치하기

문제를보고 배열을 만들어야겠다는 생각을 바로했다. 이번에도 형변환에서 미처 생각치 못한 부분이 있어서 에러가 났다. 하지만 arrayList에서 각각의 요소들이 string타입이고, 따로 떨어져있기 때문에 모두 뭉치기 위해 joinToString()함수를 사용해서 붙여버렸다. 일단 마지막 출력이 873211로 잘 나오는것을 확인할 수 있다. 다행히도 이번에는 toLong()함수를 이용해 아무 문제없이 형변환을 바로했다. 계속해서 비슷한 유형의 문제를 푸니깐 헷갈렸던 부분도 고쳐지는것 같다. 이번에도 어김없이 다 푼 후 다른 사람들의 코드를 봤는데 fun solution(n: Long): Long = String(n.toString().toCharArray().sortedArrayDescending())...

프로그래머스 lv1 정수 제곱근 판별

결론적으로 제곱근이 양의 정수이면 제곱을 리턴하고, 정수가 아니면 -1 을 리턴하라는 소리인데.. 너무 복잡하게 생각해서 sqrt(Double 혹은 Float ) 함수를 이용했다. 그 후 그 제곱근이 정수인지 확인하기위해 루트를 제곱한값이 정수와 같은지 확인하는 작업까지 해서 코드가 아래와 같아졌다. 생각이 너무 길어진거 같아서 다른 사람의 풀이를 보았는데 아주 간단한 코드를 봤다. 굳이 함수를 쓰지 않아도 단 몇줄에 완성된 코드이다. class Solution { fun solution(n: Long): Long { for (i in 0..n) { if (i * i == n) { return ((i + 1) * (i + 1)) } } return -1 } } 굉장히 깔끔하다. 코드를 설명해보자면 이런것..

728x90