목록알고리즘 (15)
이 세계에선 내가 개발자?
*** 언어는 Swift! *** 이번에 풀어본 문제는 예전에 크레인 문제와 조금 비슷해보이는 문제였다. 물론 그 때 크레인 문제는 풀지 못했지만 문제 이해는 했었기 때문에 새로운 마음으로 문제 풀이에 도전해보았다. 자세한 문제는 아래와 같다. 여기서 중점은 2원짜리와 5원짜리를 최대한 최소가 되도록 거슬러주어야한다는 것이다. 나는 일단 숫자들을 가져와 2와 5로 빼보면서 어떤 규칙이 있는지 찾아보았다. 내가 찾은 규칙은 n이 홀수면 5로 먼저 빼주고, n이 짝수면 2로 먼저 빼주면 된다는 것이었다. 한 번 빼고 난 뒤 다시 홀수인지 짝수인지 파악해 5와 2를 빼주면 된다. 자 그럼 문제를 쪼개보자. 1. 첫째 줄에 거스름돈 액수 n이 주어진다. 2. 만약 짝수인 경우 2부터 빼주고 짝수인데 5의 배수라..
*** 언어는 Swift! *** 이번에도 저번과 마찬가지로 DP를 이용한 문제이다. 이번 문제도 쉽지 않았지만 문제 속에 힌트가 있었기 때문에 그나마 풀어볼 수 있었던 문제였던 것 같다. 거두절미하고 자세한 문제는 아래와 같다. 문제 속에 식이 있기 때문에 저 식을 이용해 풀면 된다. 단순히 식만 봤을 때는 t(0) * t(n-1) 이 1씩 늘어나면서 계속 반복되는 걸 알 수가 있다. 내가 집중한 건 저 식이 언제까지 반복되느냐이다. 만약 n이 5라면 아래와 같은 식이 나올 것이다. t(5) = t(0) * t(5-1) + t(1) * t(5-2) + t(2) * t(5-3) + t(3) * t(5-4) + t(4) * t(5-5) 이걸 더하기 기준으로 쪼개보면 t(0), t(1), t(2) ... 로..
*** 언어는 Swift! *** 이번에도 DP를 이용한 문제인 1, 2, 3 더하기 라는 문제였다. 이번 문제는 규칙을 찾아야하는 문제였기 때문에 머리가 조금 아팠다. 아직 알고리즘을 푸는데 익숙하지 않아서 그런가 이런 규칙을 찾는 것 또한 나에게는 많은 시간이 필요한 일이었기 때문에 도저히 안되겠어서 블로그의 힘을 빌렸다...🥲 이번 문제는 9095번의 1, 2, 3 더하기 문제이다 자세한 내용은 아래와 같다. 역시나 이번 문제도 DP 문제인 만큼 규칙을 열심히 찾아보려고 노력했으나 내 짧은 뇌로는 역부족이었다. 그래서 다른 사람들의 블로그를 참고하면서 내 나름대로 열심히 규칙을 이해해보려고 노력했다. 그렇게 이해한 게 아래와 같은 방법이었다. 일단 1과 2, 3 이렇게 세 숫자만을 이용해야하기 때문..
*** 언어는 Swift! *** 오랜만에 다시 돌아온 블로그 포스팅.. 벌써 9회차가 된 알고리즘 스터디는 이번에 DP 라는 새로운 개념을 이용한 문제들을 풀어보기로 했다. 사실 DP에 대해서는 난생 처음 들어본거라 공부가 필요했다. 스터디장님이 DP에 대해 설명해주시긴 했지만 그래도 내 스스로 이해가 되지 않아서 좀 걱정이었다. 그래서 나중에 DP 관련으로 정리해서 한 번 블로그 포스팅을 하면 좋을 것 같다고 생각된다. 자 그럼 이번에도 문제를 풀어보자 이번에는 14495번의 피보나치 비스무리한 수열 이라는 제목을 가진 문제였다. 자세한 문제는 아래와 같다. 기존의 피보나치 수열은 1 1 2 3 5 처럼 앞의 수들을 더한 값이 다음 값이 되는 수열이었는데 이번 문제는 제목처럼 피보나치 비스무리한 수열..
*** 언어는 Swift! *** 한동안 블로그를 올리다가 안올렸던 나는 이대로는 안되겠다 싶어서 다시 티스토리를 켰다. (사실 문제를 풀지 못해서 못 올린 것도 있지만) 벌써 7회차에 접어든 알고리즘 스터디(a.k.a 낮평이알 스터디) 앞으로 점점 더 어려워질 것 같은데 내가 따라갈 수 있을지가 정말 걱정이다. 그래도 어디 한번 가보자고! 이번 문제는 4358번 생태학이라는 문제이다. 자세한 문제는 아래와 같다. (더 자세한 문제는 이미지를 클릭하면 볼 수 있다.) 결론적인 부분은 각 종이 전체에서 몇 %를 차지하는지 구하는 프로그램인데 솔직히 처음에는 이해가 가지 않았다. 전체에서 몇 %인데 그 전체가 어느 전체인지, 뭔가 따로 주는 데이터가 (API 같은) 있는건지 이미 결론적으로 나와있는 종의 %..
*** 언어는 Swift! *** 이번에는 되게 재미있는 내용을 담고 있는 문제였다. 14582번의 오늘도 졌다 라는 문제였다. 자세한 문제는 아래와 같다. 나는 야구를 잘 몰라서 처음에 문제를 이해하는 데 조금 시간이 걸렸다. 근데 뭐 그렇게 어려운 내용은 아니었어서 그래도 금방 이해가 됐다. 역전승도 아니고 역전패라니... • ᴗ •̥ ˳ ˳ 역전패는 말 그대로 이기고 있다가 막판에 지는 걸 이야기한다. 자 그럼 슬프지만 문제를 한 번 쪼개보자 1. 첫째 줄과 둘째 줄에는 각각 울림과 스타트링크의 득점의 주어진다. 2. 1회초, 1회말을 거치면서 울림과 스타트링크의 득점을 계산한다. 3. 경기가 진행될 동안 울림이 이긴 적이 있으면 역전패 처리를 한다. 어짜피 울림은 지게 되어있다는 걸 문제에서 명시..
*** 언어는 Swift! *** 이번에는 비슷한 단어라는 이름을 가지고 있는 2607번 문제이다. 이 문제를 풀 때 진짜 생각해야할 것도 많았고, 문제도 이해하는데 시간이 조금 걸렸고 해서 푸는데만 4시간 이상이 걸렸던 문제였다. 처음에 스터디 하기 전에 풀어간 코드가 중간에 마음에 안드는 부분이 있어서 블로그 포스팅 하기 전에 다시 수정했지만 이 코드도 딱히 마음에 드는 편은 아니었다. ⸜( ⌓̈ )⸝ 어쨌든 거두절미하고 자세한 문제 내용은 아래와 같다. 자 오늘도 어김없이 문제를 쪼개보기로 하자 1. 첫째 줄에는 단어의 갯수가 주어지며, 둘째 줄 부터는 한 줄에 하나씩 단어가 주어진다. 2. 두개의 배열 갯수가 같지만 하나씩 다른 문자가 있으면 바꿔준다. 3. 비교하는 단어가 더 길다면 첫번째 단어..
*** 언어는 Swift! *** 벌써 알고리즘 스터디를 시작한 지 4회차이다. 점점 더 어려워지는 문제들을 풀면서 그래도 내가 처음보다는 문제를 풀 수 있다는 것에 놀라웠다. 문제를 풀고 나서 물론 어려웠지만 그래도 다 풀 수 있어서 정말 좋았던 스터디인 것 같다. 자 그럼 오늘도 알고리즘을 시작해보자😇 오늘의 문제는 2164번의 카드2 라는 문제였다. 자세한 문제는 아래와 같다. 솔직히 문제만 보면 어렵지 않은 문제였지만 시간초과에 걸려서 몇 번을 실패했던 문제였다. 스터디 때 보니까 C++로 하셨던 분이 사용했던 방식을 똑같이 썼는데 Swift는 시간복잡도가 높아서 시간초과가 떴었다. 너무 슬프다... 나중에 시간 복잡도도 한번 정리해보고 싶다!🤒 자 그럼 이번에도 문제를 쪼개보자 1. N을 입력받..
*** 언어는 Swift! *** 드디어 3회차 스터디가 시작됐다. 이번 문제들은 조금 어려운 문제들밖에 없어서 조금 애먹었지만 그래도 이번에는 다른 사람의 블로그를 참고하면서 푸는 방법을 배웠다. 물론 그 사람들의 코드를 그대로 베껴오는 것은 안되지만 그래도 참고 정도로 사용하는 방법을 배워서 좋았던 회차였던 것 같다!🥰 이번에 풀어볼 문제는 1920번 수 찾기 라는 문제였다. 이번 문제도 문제를 이해하는데 조금 시간이 걸렸다. 진짜 문제 이해하는게 너무 어려워서 조금 슬펐다🥲 그래도 포기하지 말고 다른 사람의 블로그를 보면서 조금씩 이해해보자! 가보자고! 자 먼저 항상 했던 문제 쪼개기를 해보자. 1. 첫째 줄에는 N이 주어지고, 다음 줄에는 N개의 정수 A[N]이 주어진다. 2. 다음 줄에는 M이 ..
*** 언어는 Swift! *** 이번엔 문제를 풀면서도 잘 안풀려서 좀 어려웠지만 그래도 기록을 위해서 블로그를 작성해보려고 한다. 사실 더 좋은 방법이 있고, 지금 내가 푼 방법은 썩 마음에 드는 풀이는 아니었다..! 🥲🥲 이번에 풀 문제는 1457번, 방 번호 라는 제목을 가진 문제였다. 자세한 내용은 아래와 같다. 이번 문제는 .. 정말.. 내 기준으로 6과 9 때문에 풀기가 굉장히 어려웠다. 그래도 한 번 쪼개보자 1. 첫째 줄에 다솜이의 방 번호 N이 주어진다. 2. 입력 받은 방 번호를 나눈 후 세트와 비교한다. 3. 세트가 없을 경우 세트를 하나 추가한다. 4. 만약 6과 9의 경우는 서로의 숫자를 사용한다. 여러 가지 방법이 있겠지만 내가 선택한 방법은 가장 쉽고, 기본적인 방법인 세트를..