728x90
반응형

Kotlin/Algorithm Problems 129

<프로그래머스> n^2 배열 자르기(Lv.2)

[깃허브 & 프로그래머스] https://github.com/heesoo-park/ForCodeKata/tree/main/n%5E2%20%EB%B0%B0%EC%97%B4%20%EC%9E%90%EB%A5%B4%EA%B8%B0 https://school.programmers.co.kr/learn/courses/30/lessons/87390?language=kotlin 이 문제는 상당한 고민을 했고 마지막 실타래를 풀지 못하다가 전에 다른 언어로 풀었던 경험으로 인해 풀렸다. 처음에 문제를 보고는 '어떻게 저렇게 2차원 배열을 만들지?'라는 생각을 했다. 하지만 제한사항의 배열의 길이가 10^7 까지 가능한 걸보고 '응 아니구나' 싶어서 이 방법은 넘겼다. 그리고 계속 고민한 것은 '뭔가 2차원 배열의 주소랑..

<프로그래머스> H-Index(Lv.2)

https://github.com/heesoo-park/ForCodeKata/tree/main/H-Index https://school.programmers.co.kr/learn/courses/30/lessons/42747 하... 이 문제는 참... 하... 뭔가 문제를 읽는데 문제를 읽는 거 같지가 않고 추리문이나 비문학을 읽는 느낌이 났다. 오묘~했다. 어떻게 이상과 이하가 동시에 사용되는 거야... 그래서 처음에는 삽질을 많이 했다. 테스트케이스가 하나뿐이라서 더 감이 잘 안 오기도 했다. 그러다가 한 블로그에서 깨달음을 얻었다. 괜히 정렬이 카테고리에 있는 게 아니었다. 그냥 인용횟수가 조건을 만족한다고 오케이가 아니었다. 인용횟수가 조건을 만족하면서 i가 제일 큰 거를 가져가야하는 것이다!! ..

<프로그래머스> 연속 부분 수열 합의 개수(Lv.2)

https://github.com/heesoo-park/ForCodeKata/tree/main/%EC%97%B0%EC%86%8D%20%EB%B6%80%EB%B6%84%20%EC%88%98%EC%97%B4%20%ED%95%A9%EC%9D%98%20%EA%B0%9C%EC%88%98 https://school.programmers.co.kr/learn/courses/30/lessons/131701 이 문제는 보자마자 저번에 풀었던 '괄호 회전하기' 문제가 떠올랐다. 진짜 배열값을 옮기지는 않지만 옮기는 효과를 내는 나머지 연산..!! 이제 필요한 건 길이마다의 합을 구하는 거였다. '길이마다 따로 구할 필요가 있나? 그냥 반복문 돌면서 더하는 걸 집합에 넣으면 될 거 같은데...?' 위의 생각이 번뜩 나서 그..

<프로그래머스> 괄호 회전하기(Lv.2)

https://github.com/heesoo-park/ForCodeKata/tree/main/%EA%B4%84%ED%98%B8%20%ED%9A%8C%EC%A0%84%ED%95%98%EA%B8%B0 https://school.programmers.co.kr/learn/courses/30/lessons/76502 코딩 문제들을 풀다보면 한번은 보게 되는 괄호문제라서 익숙하게 다가왔다. 물론 회전이 들어가있어서 조...금 당황하긴 했지만 'Lv.2니까 그럴 수 있지'라며 넘어갔다. 그리고 그 회전이 이 문제에서는 가장 큰 산이 아니었나 싶다. '어짜피 한 방향으로만 회전을 하는 거고 배열 자체를 돌리기에는 소모값이 너무 많으니까 어떻게든 인덱스를 가지고 해결을 해야겠는데...' '아! 나머지 연산쓰면 되겠다..

<프로그래머스> 귤 고르기(Lv.2)

https://github.com/heesoo-park/ForCodeKata/tree/main/%EA%B7%A4%20%EA%B3%A0%EB%A5%B4%EA%B8%B0 https://school.programmers.co.kr/learn/courses/30/lessons/138476 처음에 문제 이해하는데 시간이 좀 걸렸다. 점심을 먹고 얼마 안 돼서 그런건가... 여러번 차근차근 읽고 문제 풀이 진행 시작! 가장 먼저 막힌 순서는 '귤의 크기와 개수의 쌍을 어떻게 저장할 것인가?'였다. 그냥 배열로 하자니 천만개의 배열이니까 아무리 많이 써도 10퍼센트 밖에 안 쓰는데 너무 공간 낭비 같았고, 이후에 정렬할 때를 생각해봐도 좋지 않은 방법 같았다. 그 다음에 생각한건 Pair를 원소로 갖는 List였다...

<프로그래머스> 멀리 뛰기(Lv.2)

https://github.com/heesoo-park/ForCodeKata/tree/main/%EB%A9%80%EB%A6%AC%20%EB%9B%B0%EA%B8%B0 https://school.programmers.co.kr/learn/courses/30/lessons/12914 이 문제는 보자마자 바로 '아...! 그 문제다' 싶었다. 코틀린으로는 프로그래머스 문제, 자바로는 백준 문제를 풀고 있는데 최근에 백준에서 봤던 유형같았기 때문이다. 역시 코딩 문제들은 많이 풀면 풀수록 그 유형이겠거니 하는 느낌이 오게 되는 것 같다. '전에 이 유형 풀 때 DP를 사용해서 했으니까 여기에도 적용시켜서 해보면 될 거 같고... 1칸부터 써보면서 규칙을 찾아보자!' 찾아낸 규칙은 dp[i] = dp[i - 1]..

<프로그래머스> N개의 최소공배수(Lv.2)

https://github.com/heesoo-park/ForCodeKata/tree/main/N%EA%B0%9C%EC%9D%98%20%EC%B5%9C%EC%86%8C%EA%B3%B5%EB%B0%B0%EC%88%98 https://school.programmers.co.kr/learn/courses/30/lessons/12953?language=kotlin 매우 짧은 지문으로 인해 쉽게 생각하고 들어갔다. 최소공배수를 모르는 것도 아니고 배열의 크기도 생각보다 크지 않았기 때문이다. 하지만 생각보다 시간이 많이 걸렸다. 처음에 뻘짓을 했기 때문이다. 그 때 한 건 2부터 100을 가지고 배열을 순회하면서 배열 내의 모든 원소가 해당 숫자로 나머지 없이 나눠지면 모든 원소에 해당 숫자를 나눠 저장하는 방식..

<프로그래머스> 예상 대진표(Lv.2)

https://github.com/heesoo-park/ForCodeKata/tree/main/%EC%98%88%EC%83%81%20%EB%8C%80%EC%A7%84%ED%91%9C https://school.programmers.co.kr/learn/courses/30/lessons/12985 이 문제를 처음 볼 때는 문제 지문이 너무 길어서 약간 기가 죽었었다... 하지만 문제가 원하는 건 간단하더라 '참가자 2명이 언제 만나냐?' 부전승이 나오지 않고 참가자 2명은 항상 이긴다고 했기 때문에 생각할 예외사항들은 거의 없었다. '대진표 반복은 주어지는 게임 참가자 수 N의 제곱근을 구해 반복하고, 참가자가 이겼을 때 받게 되는 번호를 체크하다가 만났을 때 반복문을 끝내면 되겠다...!' ...라는 간..

<프로그래머스> 카펫(Lv.2)

https://github.com/heesoo-park/ForCodeKata/tree/main/%EC%B9%B4%ED%8E%AB https://school.programmers.co.kr/learn/courses/30/lessons/42842 처음에는 문제를 보고 고민을 했다. 어떻게 접근을 해야하나... 그러다가 주어지는 입력값을 보고 접근법을 떠올렸다. "갈색과 노란색을 더하면 정사각형 또는 직사각형의 개수가 나오는구나 그러면 이걸 최소 세로 길이인 3부터 시작해서 만들어지는 사각형에 들어가는 갈색 또는 노란색의 개수를 체크하면 될 거 같은데?" 세로 길이를 기준으로 잡은 이유는 제한 사항 중에 '카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.'라고 되어 있었기 때문이다. 이 접근법으..

반응형