728x90

TIL/kotlin 알고리즘 77

kotlin 프로그래머스 lv1 바탕화면 정리

문제를 보고 #과 .이 리스트 안에 들어가 있어서 당황했다. 그래서 A4용지에 그리면서 이해했다. 정리를해보자면 i를 행 j를 열로 표현하고 시작점과 끝점을 사각형위의 점으로 생각해보았다. 직사각형의 세로방향 맨 위쪽에 #이 있다면 변수 lux에 행 i가 저장된다. #이 행 마지막에 있을때 직사각형 세로끝이 결정되고 변수 rdx에 행 i+1이 저장된다. #이 행들중 가장 왼쪽에 위치할때 luy가 결정되고 j 값이 luy에 저장된다. #이 행들중 가장 오른쪽에 위치할때 rdy가 결정되고 j+1값이 rdy에 저장된다. 그래서 코드를 짤때 wallpaper 배열에서 # 문자가 있는 부분을 감싸는 최소 크기의 사각형을 찾아내고, 이를 표현하는 네가지 좌표를 반환하도록 짰다. 1. 변수 초기화 lux rdx lu..

kotlin 프로그래머스 lv1 성격 유형 검사하기

해당 문제를 아무리 풀어도 풀리지 않았다. 2시간은 계속 고민만 했던것 같다. 문제를 정리하자면 지표 4가지가 있고 각각 성격유형이 2개씩 존재하는데 그 성격 유형은 survey 매개변수로 주어진다. 문제에서 성격유형이 비동의와 동의 영역에 위치하게되고 이것은 배열에 적혀진것에따라 결정된다. 그래서 처음에 코드를 아래와 같이 작성했다. 결과는 계속 실패했다. 그래서 너무 시간이 오래걸려 다른사람들의 코드를 참조했다. 내가 푼 방식과 다르게 굳이 when 케이스를 사용해서 점수를 분기하지 않고 score 배열을 초기화한 후 for문안에서 점수를 집어넣다. 그 후 person배열에서 'R' 과 'T'는 쌍으로 있어서 step을 2번 해준 후 score[i]와 score[i+1]을 비교했을때 i번째 값이 크다..

kotlin 프로그래머스 lv1 햄버거 만들기

문제에서 상수가 빵, 야채,고기,빵 순서대로 포장한다고 했고, 순서대로 빵->1/야채->2/고기->3 이라고 했다. 그래서 나는 포장순서대로 숫자타입의 배열로 변수를 만들었었다. 그 후 ingredient 배열에서 [1,2,3,1] 배열이 몇개 나오는지 테스트 해봤고 테스트는 모두 정답이었다. class Solution { fun solution(ingredient: IntArray): Int { val prepareSlice = intArrayOf(1, 2, 3, 1) return (0..ingredient.size - prepareSlice.size) .count { ingredient.sliceArray(it until it + prepareSlice.size).contentEquals(prepar..

kotlin 프로그래머스 lv1 체육복

해당문제의 입출력 예시를 보면 첫 예시에서 n = 5일때, lost 배열은 [2,4] reserve 배열은 [1,3,5] 이렇게 되어있는데 1 2[lost] 3 4[lost] 5 여기서 인접한 애들만 lost에게 여벌을 줄수가 있어서 2는 1과 3에게서만 받을 수 있고 , 4는 3 또는 5에게서만 받을 수 있다. 그결과 return은 5가 된다. 하지만 제한사항에서 여벌 체육복이 있는 학생만 다른 학생에게 체육복을 빌려 줄수 있다고 했다. 그렇지만 여벌이 있더라도 도난 당하는 경우가 있어 이때는 빌려줄수가 없다고 한다. 그래서 나는 lost배열과 reserve 배열을 수정가능한 배열로 변환 후 서로 갖고있는 요소는 삭제하려고한다. 먼저 lost.sort() reserve.sort() 를 이용해서 배열을 ..

kotlin 프로그래머스 lv1 숫자 짝꿍

문제를 계속 풀어도 에러가 났다. 내가 푼 방식은 아래와 같다. 변수 commonDigits는 X와 Y에서 공통으로 갖고 있고 중복은 피한 내림차순의 수로 지정했다. if문에서 중복되는 숫자의 사이즈가 2이면서 0이 두번 들어가면 return을 0으로 하는것과 공통으로 가지는 숫자가 없다면 -1을 반환하도록 하였고 또한 '0'이 공통 숫자로 존재하는지 확인한다. 만약 '0'이 있다면, 두 숫자 사이에 '0'이 공통으로 존재하는 경우이다. commonDigits에 '0'이 존재하는 경우, commonDigits.filter { it != '0' }를 사용하여 '0'을 제외한 나머지 숫자로 이루어진 새로운 리스트인 nonZeroCommonDigits를 만든다. 그리고 다음의 return 문에서는 nonZer..

kotlin 프로그래머스 lv1 로또의 최고 순위와 최저 순위

문제를 풀면서 lottos에서 0인 요소와 0이 아닌 요소를 win_nums와 비교하면서 counting 해야겠다는 생각이 들어 forEachIndexed 구문이 바로 생각났다. 하지만 문제는 바로 풀리진 않았다. 순위를 구하는 과정에서 계속 애를 먹었기 때문이다. countMatch 와 countZero 변수를 만들어서 각각 count 갯수를 담아주었다. 방법은 아래와 같이 했다. lottos배열을 돌면서 0인 요소에서 win_nums의 요소와 모두 일치하면 랭크가 올라가기 때문에 highestRank에는 countZero 도 카운팅 해줬다. 하지만 0인요소가 당첨되지 않는경우는 counting을 배제했다. 하지만 랭크는 1~6까지 밖에 없어서 각각의 카운트를 더한값들이 1은 넘어가게끔 coerceAt..

kotlin 프로그래머스 lv1 기사단원의 무기

맨처음 문제를 보자마자 1..number까지 약수를 담는 새로운 리스트를 만들었다. 처음에는 위와 같이 작성했으나 오류가 났다. 원인은 시간초과였다. 그래서 코드의 양을 줄이기로 결심했다. 위와 동일하게 약수를 담는 배열을 초기화하고 크기는 number+1만큼 지정했다. 코드는 아래와 같다. 2중 for문을 사용하지 않고 문제를 풀었더니 계속 에러가나서 그냥 원래 풀던데로 풀었다. i는 그대로 1~number까지의 수이고 풀이는 아래와 같이 정리했다. 1.divisors 배열은 1부터 number 까지의 숫자에 대한 약수 개수를 저장하는 배열이다. 배열의 각 인덱스는 기사 번호에 해당하고, 배열의 값은 해당 기사 번호의 약수 갯수이다. 2. 바깥쪽 for루프는 1부터 number 까지의 기사 번호를 반복..

kotlin 프로그래머스 lv1 소수 만들기

이 문제를 보자마자 nums 배열에서 모든 3개의 수를 뽑아서 그 합을 리스트에 넣을 생각을 했다. 그래서 맨처음 변수 sumList를 만들어준 후 for문을 돌려서 nums[i] nums[j] nums[k] 를 뽑아냈다. i는 nums배열길이만큼 돌아가는데 그 중 하나의 수이고 j는 i를 제외한 i+1번째 부터 끝까지이다. k는 j를 제외한 수부터 끝까지의 수이다. 이렇게 3개 수의 모든 경우를 더해서 sumList에 add 한다. 그 후 var count = 0으로 초기화한 후 소수는 자기자신을 약수로 가지는 수이고 sumList의 요소는 3수를 더했기때문에 1의 자리면 다시 for문으로 돌아가게끔 아래와 같이 작성했다.

kotlin 프로그래머스 lv1 모의고사

해당문제를 보자마자 수포자들찍는 방식이 옛날 초등학교때 숫자의 규칙을 찾는것처럼 생겼다는 생각이 들었다. 1번 수포자는 1,2,3,4,5 로 순환되는 숫자의 형태로 찍고 있고, 2번 수포자는 2,1,2,3,2,4,2,5... 이런식으로 8번찍 반복된다. 3번 수포자도 위의 사람들과 같이 3,3,1,1,2,2,4,4,5,5.. 10개씩 순환된다. 그래서 각각 배열을 만들었다. 그 후 answer값과 supoja 리스트값들을 비교하면서 count 하면 될것 같았다. 새로운 맵을 초기화한 후 answer 만큼 반복하면서 키 1 2 3 에 카운팅을 하기로 했다. answers는 맵이 아니기 때문에 count를 바로 할 수 없었다, 그래서 withIndex()함수를 사용해서 index와 value값을 사용할 수 ..

728x90