programmers 쇠막대기 이 문제는 수업시간에 다루었던 내용입니다. Stack 자료구조를 사용하면 쉬운 문제인데요. 우선 코드부터 보겠습니다. import java.util.Stack; class Solution { public int solution(String arrangement) { int answer = 0; Stack arrageStack = new Stack(); String[] arragements = arrangement.split(""); for(int i = 0; i < arragements.length; i++) { if(arragements[i].equals("(")) { arrageStack.push(arragements[i]); answer++; } if(arragemen..
programmers 가장 큰 수 정렬 카테고리에 있던 문제 중 하나입니다. 어제 도전을 하였다가 어떤 식으로 구현해야할지 방향이 안나와 다른 사람의 풀이를 참고하였습니다. 다른 사람들의 풀이를 보다가 공통적인 부분을 하나 발견을 했는데요. '정렬 부분에 대한 로직을 Overriding하여 재구현한다'는 것이었습니다. 이 부분이 어떻게 구현되어 있는지 살펴보다가 흥미로운 개념 2개를 발견하였는데요. 그건 바로 Comparable과 Comparator라는 개념입니다. 구글링하여 찾아보니 이 두 개념에 대한 비교는 바늘과 실처럼 항상 따라다니더라구요. 오늘은 Comparator에 대해 가볍게 알아보고 다음 인터페이스에 대한 개념을 자세히 다르게 되면 같이 비교하도록 하겠습니다. 왜냐하면 Com..
programmers K번째수 이 문제는 크게 고민할 필요없이 문제에서 설명했던 부분을 그대로 코드로 구현하면 되는 문제였습니다. 다만 Arrays클래스와 관련된 유용한 메서드가 있어서 기록해두려 합니다. 배열에서 특정 범위만 잘라서 저장하고 싶을 때 이 경우 Arrays.copyOfRange(origin, from, to)을 사용할 수 있습니다. 'origin'은 원본 배열, 'from' 은 시작 Index, to는 마지막 배열입니다. 이 때 실제 복사될 때 to까지가 아니라 바로 이전 Index까지라는 점만 주의하면 될 것 같습니다. 배열을 정렬하고 싶을 때 List컬렉션에 담긴 수를 정렬하고 싶을 때 Collection클래스를 import하여 Collection.sort..
leetcode 5 이번 문제는 'Longest Palindromic Substring'입니다. Palindromic이란 말은 앞뒤로 읽어도 똑같은 문자열(회문)을 의미합니다. 예를들어 aba, abba 등이 있겠죠. 재미있는 문제라고 생각은 했지만 도무지 방향이 잡히지 않더라구요. 그래서 해답을 참고하였습니다. 다른 사람들의 해답을 보아도 비슷한 부분들이 있었는데요. 제가 고민하던 부분과 해답에서 이를 해결한 부분 중심으로 정리하도록 하겠습니다. 먼저 해답의 소스코드는 아래와 같습니다. class Solution { public String longestPalindrome(String s) { if(s.equals("")) return ""; int start = 0, end = 0; f..
boj 1003 피보나치 수열에 대해 이름을 모르실지 몰라도 규칙을 알면 기억 나시는 분들 많으실거에요. 그만큼 간단하고 단순한데요. 보통은 재귀를 이용하여 많이 구현합니다. 오늘은 가볍게 쉬운 문제를 풀고 싶어서 백준 문제 순위에서 쉬워보이는 문제를 찾았는데요. 앞 페이지에서 쉽게 찾을 수 있었습니다. 그만큼 많이 도전한 문제란 뜻이죠! 처음 이 문제를 보고 쉽겠다는 생각이 들었습니다. 애초에 피보나치 수열의 코드를 문제에서 제공했기 때문입니다. 근데 이를 이용해서 문제를 풀었는데 시간초과가 떴습니다... 다시 문제를 자세히 보니 제한시간이 0.25초 이더라구요. 따라서 재귀의 계산을 줄여야 했고 동적 계획법을 사용해야 했습니다. 제가 생각하는 동적 계획법은 과거에 계산했던 값을 저장해두고 이후에 그 ..
boj 1914 오늘 알고리즘은 오전에 배운 '하노이탑'을 설명해보려고 했는데요. 이게 어떻게 구현할 수 있는지는 배웠지만 막상 설명하려고 생각하니 정말 감이 안잡히네요. 아직 재귀가 익숙하지 않은 것 같아요. 그래도 제가 좀 더 성장하였을 때 제대로 설명할 수 있을거라 생각하며 honux가 설명한 코드를 남겨놓으려 합니다. #include #include int count = 0; int limit; void move(int n, int src, int target) { printf("%d %d\n", src, target); } void hanoi(int n, int fr, int to) { count++; if(n == 1) { move(n, fr, to); return; } int ..