코틀린(Kotlin)/프로그래머스 39

[프로그래머스/코틀린(Kotlin)] 배열 원소의 길이

문자열 배열 strlist의 각 원소의 길이를 담은 배열을 리턴 시키기 예시) 풀이 map{}을 활용하기 제출 코드 (코드 해석해 보기) 4) strlist.map{}으로 strlist의 인자를 바꿔준다(e를 e.length로) 5) .length를 활용해서 각 인자들의 길이를 IntArray인 answer에 추가시켜 준다 answer를 굳이 빼고 싶다면.. // 제출 코드에 굳이 answer를 적지 않으려면 class Solution { fun solution(strlist: Array): IntArray { return strlist.map{ e -> e.length}.toIntArray() } }

[프로그래머스/코틀린(Kotlin)] 양꼬치

하나의 12,000원인 양꼬치 n인분과 2,000원인 음료수 k개를 계산해서 얼마를 지불할지 리턴하기 단, 양꼬치를 10인분 먹으면 음료수 하나가 서비스이다 예시) 풀이 12000*n + 2000*k에 예외처리(n이 10일 때마다 -2000)를 넣어준다 제출 코드 (코드 해석해 보기) n을 10으로 나눠서 나오는 몫만큼 k에서 빼준다 근데 지금 이걸 쓰고 있는 순간에 드는 생각인데 n/10의 몫이 k보다 크면 -가 나오지 않나?라는 생각이 들었다 var a = n/10 if(n>9) { (12000*n) + (2000*k) - (2000*a) } else { (12000*n) + (2000*k) } 이렇게 수정해도 될 것 같다

[프로그래머스/코틀린(Kotlin)] 두 개 뽑아서 더하기

정수 배열 numbers의 서로 다른 인덱스에 있는 두 수를 뽑아서 만들 수 있는 모든 수를 배열에 오름차순 정렬하기 예시) 풀이 다중 for문을 이용해서 서로 다른 인덱스를 사용하기(삼총사 편 참고) set으로 배열 속 중복제거 제출 코드 (코드 해석해 보기) 3) mutableSetOf를 사용하여 배열 속 중복값을 제거해 준다 5, 6) 삼총사편에서 썼던 것처럼 서로 다른 두 인덱스값을 구한다 7) 서로 다른 두 인덱스 값을 answer에 더해준다 10) answer에 sorted()로 오름차순 정렬 배열 속 중복제거 = set .. 처음 제출 코드는 set을 사용해서 배열 속 중복을 제거하는 법 모르고 중복값을 어떻게 제거해야 할 지 몰랐다.. 그래서 검색으로 hashSet, distinct, se..

[프로그래머스/코틀린(Kotlin)] K번째 수

array배열의 i번째 숫자부터 j번째 숫자까지 자르고 오름차순 정렬한 후, k번째에 있는 수를 리턴 시키기 예시) 풀이 forEach{} 사용하여 특정 구문 반복 sliceArray()를 사용하여 범위를 잘라낸 새 배열 생성 sort() 사용하여 오름차순 정렬 제출 코드 (코드 보기) - 몇 시간 헤매다가 검색으로 답지와 해석을 봤다.. 5) commands.forEach{}를 사용하여 commands 배열의 특정 부분만 반복한다 6) array배열을 sliceArray()로 특정범위(i부터 j까지)를 잘라낸다 ( it[0]은 문제의 [i, j, k]가 2, 5, 3이라면 2이다. index는 0부터 시작하니까 -1, until [1]은 1 이전까지니까 -1을 하지 않아도 된다) 7) 잘라낸 배열을 오..

[프로그래머스/코틀린(Kotlin)] 문자열 내 마음대로 정렬하기

문자열로 구성된 리스트를 받아, 각 문자열의 n번째 인덱스를 기준으로 오름차순 하기 예시) 풀이 sortedWith(compareBy)를 사용하여 다중기준을 두고 오름차순 정렬 제출 코드 (코드 해석해 보기) sortedWith()에서 comparator를 활용하여 첫 번째는 인덱스[n]번째를 기준으로, 그다음 기준은 [제한 조건]에 있는 n번째 인덱스가 같은 문자열일 경우, 사전순으로 배치시킨다 .toTypedArray()로 string타입을 Array타입으로 변형시켜 준다 sortedBy() selector를 지정하여 기준을 정할 수 있다 -> ??.sortedBy{ it.first } 내림차순으로 사용하고 싶을 땐 sortedByDescending() -> ??.sortedByDescending{ ..

[프로그래머스/코틀린(Kotlin)] 숫자 문자열과 영단어

숫자의 일부 자릿수가 영단어로 바뀌어져 있는 문자열 s를 의미하는 원래 숫자로 리턴 시키기 but, 숫자는 그대로 리턴하기 예시) 풀이 replace()를 사용해서 특정 문자를 변형한다 .toInt()를 사용해서 string타입을 Int형으로 리턴 시키기 제출 코드 (코드 해석해 보기) 무지성 replace() 연달아 붙이기로 해결.. ㅎㅎ;; for문을 이용한 다른 분들의 풀이 7) i가 num의 처음부터 반복하니까 2일 때 -> num[2]("two")를 2로 바꿔준다 (indices로 쓰니까 뭔가 i가 1부터 시작하는 것 처럼 헷갈리는데 for(i in 0 until num.size)로 써놓을 걸 그랬다) 9) str이 string타입이기 때문에 .toInt()로 Int형으로 바꿔준다 replace..

[프로그래머스/코틀린(Kotlin)] 시저 암호

문자열 s에 있는 각 알파벳을 n만큼 밀어서 다른 알파벳으로 암호화하기 예시) 풀이 카이사르 암호의 법칙.. (이라고 한다..) 리스트화 후 다시 string 타입으로 제출 코드 (코드 해석해 보기) 이번 문제는 솔직히 리스트화(map)와 제한 조건 덕분에 when까지만 떠올릴 수 있었고, 대문자 알파벳과 소문자 알파벳을 일일이 다 적어놓고 인덱스를 뽑아서 쓰는 형식은 너무 얽히고 복잡해져서 포기했다 특히 5, 6번째 줄은 전혀 몰라서 검색을 통해 알게 되었다 알파벳 범위 사용하는 법도 알았었는데 까먹고 있었다.. 5, 6) 카이사르 암호의 법칙을 이용하면 된다고 한다 fun Char.caesar(c: Int, n: Char, m: Char): Char = (n + (it - n + c) % (m - n..

[프로그래머스/코틀린(Kotlin)] 최소직사각형

각각의 명함들의 가로길이와 세로 길이를 파악하여 지갑의 크기를 파악하기 예시) 풀이 min(), max() 이용하기 명함을 회전할 수 있다는 것 이용하기 제출 코드 (코드 해석해 보기) 명함을 회전시킬 수 있으므로 가로길이(W)와 세로길이(H) 상관없이 최댓값을 구한다 그리고 각 행에서의 작은 수들 중에서 가장 큰 수를 곱해준다 (따지고 보면 maxW, maxH는 아닌..) (for문에 i[0], i[1]을 비교하는 이유는 행첨자([])는 열단위로, i(포인터)는 행단위로 이동한다) 7) 2차원 배열 sizes의 1행부터 끝행까지 중 최댓값을 찾는다 (명함을 회전시킬 수 있으므로, 가로길이던 세로길이던 가장 큰 길이에 맞춰야 하므로) 8) 2차원 배열 sizes의 1행부터 각 행의 최솟값들을 구하고 그 ..

[프로그래머스/코틀린(Kotlin)] 크기가 작은 부분 문자열

숫자로 이루어진 문자열 t와 p에서 t에서 p와 길이가 같은 부분문자열을 추출해서, 이 부분문자열의 수가 p의 숫자보다 작거나 같은 것이 나오는 횟수를 리턴 시키기 예시) 풀이 substring() 사용하여 문자열 자르기 for문으로 반복하여 p의 길이만큼 t배열 속 숫자 자르기 제출 코드 (코드 해석해 보기) 4) i를 (t의 길이) - (p의 길이)만큼 반복한다 t의 길이가 3141592(=7)이고 p가 271(=3)이면 t에 p의 길이만큼 있는 숫자는 5개(314, 141, 415, 159, 592)이기 때문에 t.length - p.length보다 그 크기는 1만큼 더 크다. 그래서 0..t.length - p.length로 써준다 그리고 t.length - p.length로 쓰면 for-loop..

[프로그래머스/코틀린(Kotlin)] 삼총사

정수배열 [number]에서 3개의 정수로 0을 만들 수 있는 경우에 answer++ 예시) 풀이 다중 for문 이용하면서 index 범위 설정하기 제출 코드 (코드 해석해 보기) 4) i는 number 배열의 인덱스 크기만큼 반복한다 for(i in 0 until number.size)로 써도 된다 5) j는 앞에서 구한 i + i인덱스를 제외한 나머지 인덱스 크기만큼 반복한다 6) 마찬가지로 k도 앞에서 구한 j + j인덱스를 제외한 나머지 인덱스 크기만큼 반복한다 7) number배열의 i, j, k의 합이 0일 때 answer++로 +1씩 추가해 준다