Dev 309

간만의 알고리즘 공부 - 17 (핸드폰 번호 가리기)

문제 설명이 전화 키패드에서 왼손과 오른손의 엄지손가락만을 이용해서 숫자만을 입력하려고 합니다.맨 처음 왼손 엄지손가락은 * 키패드에 오른손 엄지손가락은 # 키패드 위치에서 시작하며, 엄지손가락을 사용하는 규칙은 다음과 같습니다.- 엄지손가락은 상하좌우 4가지 방향으로만 이동할 수 있으며 키패드 이동 한 칸은 거리로 1에 해당합니다.- 왼쪽 열의 3개의 숫자 1, 4, 7을 입력할 때는 왼손 엄지손가락을 사용합니다.- 오른쪽 열의 3개의 숫자 3, 6, 9를 입력할 때는 오른손 엄지손가락을 사용합니다.- 가운데 열의 4개의 숫자 2, 5, 8, 0을 입력할 때는 두 엄지손가락의 현재 키패드의 위치에서 더 가까운 엄지손가락을 사용합니다.     - 만약 두 엄지손가락의 거리가 같다면, 오른손잡이는 오른손 ..

Dev/Algorithm 2024.07.17

간만의 알고리즘 공부 - 16 (핸드폰 번호 가리기)

문제 설명프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.제한 조건- phone_number는 길이 4 이상, 20이하인 문자열입니다. 입출력 예  내가 푼 방법fun solution(phone_number: String): String { val hiddenPosition = phone_number.length - 4 return phone_number.mapIndexed { index, number -> if (index 큰 고민없이 풀었더니 점수가 낮았고 역시 시간이 ..

Dev/Algorithm 2024.07.16

간만의 알고리즘 공부 - 15 (제일 작은 수 제거하기)

문제 설명정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.제한 조건- arr은 길이 1 이상인 배열입니다.- 인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다. 입출력 예  내가 처음에 푼 방법fun solution(arr: IntArray): IntArray { return if (arr.size == 1) { intArrayOf(-1) } else { arr.sortedArrayDescending()...

Dev/Algorithm 2024.07.14

간만의 알고리즘 공부 - 14 (없는 숫자 더하기)

문제 설명0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.제한사항- 1 ≤ numbers의 길이 ≤ 9    - 0 ≤ numbers의 모든 원소 ≤ 9    - numbers의 모든 원소는 서로 다릅니다.. 입출력 예 내가 푼 방법 fun solution(absolutes: IntArray, signs: BooleanArray): Int { return 45 - numbers.sum()} 풀었을 때 1점만 받은것 보니 그닥 잘풀지 못한듯 합니다. 어떤 방법이 더 효율적인지 궁금해서 다른 사람 코드를 봤습니다.  다른 사람 코..

Dev/Algorithm 2024.07.10

간만의 알고리즘 공부 - 13 (음양 더하기)

문제 설명어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.제한사항- absolutes의 길이는 1 이상 1,000 이하입니다.    - absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.- signs의 길이는 absolutes의 길이와 같습니다.    - signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다. 문제를 읽었을때 해당 귤 크기별로 리스트를 만들 생각을 했었고 없는 크기의 귤 리스트는 제거하고 큰 크기별로 리스트를 가..

Dev/Algorithm 2024.07.10

간만의 알고리즘 공부 - 12 (귤 고르기)

문제 설명경화는 과수원에서 귤을 수확했습니다. 경화는 수확한 귤 중 'k'개를 골라 상자 하나에 담아 판매하려고 합니다. 그런데 수확한 귤의 크기가 일정하지 않아 보기에 좋지 않다고 생각한 경화는 귤을 크기별로 분류했을 때 서로 다른 종류의 수를 최소화하고 싶습니다.예를 들어, 경화가 수확한 귤 8개의 크기가 [1, 3, 2, 5, 4, 5, 2, 3] 이라고 합시다. 경화가 귤 6개를 판매하고 싶다면, 크기가 1, 4인 귤을 제외한 여섯 개의 귤을 상자에 담으면, 귤의 크기의 종류가 2, 3, 5로 총 3가지가 되며 이때가 서로 다른 종류가 최소일 때입니다.경화가 한 상자에 담으려는 귤의 개수 k와 귤의 크기를 담은 배열 tangerine이 매개변수로 주어집니다. 경화가 귤 k개를 고를 때 크기가 서로..

Dev/Algorithm 2024.07.09

간만의 알고리즘 공부 - 11 (나머지가 1이 되는 수 찾기)

문제 설명자연수 n이 매개변수로 주어집니다. n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 return 하도록 solution 함수를 완성해주세요. 답이 항상 존재함은 증명될 수 있습니다.제한 사항- 3 ≤ n ≤ 1,000,000 입출력 예 입출력 예 설명- 10을 3으로 나눈 나머지가 1이고, 3보다 작은 자연수 중에서 문제의 조건을 만족하는 수가 없으므로, 3을 return 해야 합니다.- 12를 11로 나눈 나머지가 1이고, 11보다 작은 자연수 중에서 문제의 조건을 만족하는 수가 없으므로, 11을 return 해야 합니다.  내가 푼 방법fun solution(n: Int): Int { for (i in 1..n) { if (n % i == 1) { ..

Dev/Algorithm 2024.07.08

간만의 알고리즘 공부 - 10 (x만큼 간격이 있는 n개의 숫자)

문제 설명함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.제한 사항- x는 -10000000 이상, 10000000 이하인 정수입니다.- n은 1000 이하인 자연수입니다.  내가 푼 방법fun solution(x: Int, n: Int): LongArray { return LongArray(n) { i -> ((i + 1) * x).toLong()}} 위와 같이 코드를 작성하니 테스트 케이스를 전부 통과하지 못했다. 일단 처음에는 무슨 문제인지 이해하지 못했다.  그래서 IDE 에서 이런 저런 케이스를 테스트해보다가 "(i+1) * x..

Dev/Algorithm 2024.07.07

간만의 알고리즘 공부 - 9 (멀리 뛰기 | 피보나치 수열)

문제 설명효진이는 멀리 뛰기를 연습하고 있습니다. 효진이는 한번에 1칸, 또는 2칸을 뛸 수 있습니다. 칸이 총 4개 있을 때, 효진이는(1칸, 1칸, 1칸, 1칸)(1칸, 2칸, 1칸)(1칸, 1칸, 2칸)(2칸, 1칸, 1칸)(2칸, 2칸)의 5가지 방법으로 맨 끝 칸에 도달할 수 있습니다. 멀리뛰기에 사용될 칸의 수 n이 주어질 때, 효진이가 끝에 도달하는 방법이 몇 가지인지 알아내, 여기에 1234567를 나눈 나머지를 리턴하는 함수, solution을 완성하세요. 예를 들어 4가 입력된다면, 5를 return하면 됩니다.제한 사항n은 1 이상, 2000 이하인 정수입니다. 해당 문제는 손으로 일일히 구하는 형태로는 어느정도 구하겠는데, 어떻게 해결해야할지 감이 잡히지 않았다. 처음 접근은 멀리뛰..

Dev/Algorithm 2024.07.06

간만의 알고리즘 공부 - 8 (하샤드 수)

문제 설명양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.제한 조건x는 1 이상, 10000 이하인 정수입니다. 입출력 예 내가 푼 방법fun solution(x: Int): Boolean { var haxadNum = x.toString().split("").filter { it.isNotEmpty() }.map{ it.toInt() }.sum() return x % haxadNum == 0} 코드 첨삭fun solution(x: Int): Boolean { //..

Dev/Algorithm 2024.07.06