본문 바로가기
728x90

츄Log/알고리즘 연습장43

연습#19 안녕하세요. 오늘도 문제를 풀었습니다. 1470. Shuffle the Array 간단해서 빠르게 풀긴 했는데, index용 변수를 너무 많이 사용하였습니다. 총 4개를 사용하였네요 -_-;;; 문제 자체가 어렵지 않아서 4개를 사용할만 했지만, 하다가 좀 헷갈릴 수도 있겠다는 생각이 들었습니다. 아래 두개가 제일 깔끔해 보입니다. public int[] shuffle(int[] nums, int n) { int[] res = new int[2 * n]; for (int i = 0, j = n, idx = 0; idx < res.length; i++, j++) { res[idx++] = nums[i]; res[idx++] = nums[j]; } return res; } public int[] shuffl.. 2023. 12. 20.
연습#18 안녕하세요. 어제에 이어서 오늘도 하나 풀었습니다. 1122. Relative Sort Array 어찌저찌 풀긴 했으나, 너무 긴 rumtime이 나왔습니다. 대부분이 2ms 이내로 끊었는데 저는 5ms가 나왔네요. primitive를 모두 boxing하여 처리한 게 원인인가 싶기도 합니다. (근데 제가 생각한 풀이는 이렇게 하지 않으면 안됐습니다 ㅠ) 제 풀이는 다음과 같습니다. 먼저 arr2를 자신의 값을 key로 인덱스를 value로 가지는 map을 만듭니다. 그리고 arr1를 arr2의 원소인 것, 아닌 것 두개의 리스트로 나눕니다. 위에서 만든 두 개의 리스트를 각자의 정렬 알고리즘을 통해 정렬한 후 합쳐 반환합니다. 다른 분들의 풀이도 보았습니다. 문제에 elements는 1000개 이하라는 .. 2023. 12. 19.
연습#17 안녕하세요. 바쁘고 정신 없는 나날이었습니다. 물리적인 시간도 없었지만 정신적으로도 나태했었습니다. 그래서 목표로한 1일 1알고리즘 문제풀기 도전을 며칠간 못했습니다. 에너지를 충전했으니 다시 시작합니다! 일일 지표로 봤을 때는 상승과 하락을 반복하며 왔다갔다 하지만, 주 지표 월 지표로 보았을 때는 꾸준히 우상향 하고 있는 그래프를 그리는 것이 목표입니다. (삼성전자, 애플, 구글 등등 굴지의 대기업 주식 차트 처럼요ㅋㅋ) 어제는 leetCode의 링크드리스트 문제인 203. Remove Linked List Elements를 풀었습니다. 링크드 리스트는 당연히 알고 있었지만, 알고리즘 문제로는 처음 만난 유형이어서 조금 헤맸는데요. 핀의 힌트를 받아서 문제를 결국 풀긴 했습니다. 문제는, 링크드 리스.. 2023. 12. 19.
연습#16 이전 문제가 너무 쉬워서 바로 한 문제 더 풀었습니다. 2215. Find the Difference of Two Arrays 모든 숫자들을 Set에 넣어 중복을 제거하고, Set들의 차집합을 구하는 문제였습니다. 이것도 쉬웠습니다. 다른 분들의 솔루션을 보니 다 이런 방식으로 접근한 것 같습니다. 2023. 12. 14.
연습#15 안녕하세요! 굉장히 쉬운 문제를 또 풀었습니다. 2011. Final Value of Variable After Performing Operations 하지만 쉬운건 쉬운거고, 오늘도 다른 분들의 풀이를 보면서 감탄했습니다. 가운데에 식별자가 있고, 이 식별자만을 보고 풀이를 하는 거였습니다. 포인트는 아래와 같다고 생각합니다. 1. 규칙을 찾느냐 2. +/-에 해당하는 ASCII Code를 떠올릴 수 있느냐 class Solution { public int finalValueAfterOperations(String[] operations) { int x = 0; for(String o : operations) x += (44 - o.charAt(1)); return x; } } 다른 분들의 풀이를 보니.. 2023. 12. 14.
연습#14 안녕하세요! 오늘도 풀었습니다. '애니어그램'이라는 유형의 문제였습니다. 242. Valid Anagram 풀긴 풀었으나 매우 장황하고 복잡하게 풀었습니다. 소트, 해시테이블, 배열 등등 풀이법이 다양했는데요. 저는 해시를 사용했습니다. 다시 생각해보면 해시맵을 두개 쓰지 않고 origin 하나를 만들고, 비교대상은 origin의 count를 줄여가는 식으로 접근했어도 됐겠네요! class Solution { public boolean isAnagram(String s, String t) { if (s.length() != t.length()) { return false; } final Map origin = new HashMap(); final Map transformed = new HashMap();.. 2023. 12. 13.
연습#13 바로 이어서 한 문제 더 풀었습니다. 2609. Find the Longest Balanced Substring of a Binary String 두 가지의 접근법이 있는데요, 하나는 "01"이라는 규칙을 이용해서 푸는 것과, 하나는 문자열을 순회하면서 계산하는 방법입니다. class Solution { public int findTheLongestBalancedSubstring(String s) { int res = 0; String temp = "01"; while(temp.length() 2023. 12. 12.
연습#12 안녕하세요. 오늘도 풀었습니다. 1281. Subtract the Product and Sum of Digits of an Integer 정말 많이 많이 쉬웠습니다. 문자열로 변환해서 하나씩 처리해도 되고, public int subtractProductAndSum(int n) { int product = 1; int sum = 0; String str = String.valueOf(n); for (int i=0; i 0) { sum += n % 10; product *= n % 10; n /= 10; } return product - sum; } 너무 날먹한 것 같아서 한 문제 더 풀어야겠습니다.. 2023. 12. 12.
연습#11 Check if the sentence Is Pangram 안녕하세요! 풀었습니다. 하지만 매우 쉬웠습니다. 1832. Check if the Sentence Is Pangram 저는 a~z 까지 set에 넣어두고, 문자열을 하나씩 돌면서 set에 있는 문자들을 지워가는 방식을 사용했습니다. class Solution { public boolean checkIfPangram(String sentence) { final Set hs = new HashSet(); for (char c = 'a'; c 2023. 12. 11.
연습#10 Consecutive Characters 바로 이어서 또 한 문제 풀었습니다. leetcode의 random easy 1446. Consecutive Characters 를 빨리 풀긴 했는데 너무 덕지덕지코드 같습니다..ㅠ 덕지덕지코드 : Run 돌려보고 실패하는 테스트케이스에 맞추어 보수하는 코드 이렇게 문제 푸는 것은 적절하지 않은 것 같습니다. 시간은 시간대로 쓰고 사고력은 올라가지 않는 느낌이네요. 직전 문제에서 배운 것처럼 문자열의 문자를 하나씩 순회하면서 가장 긴 문자열을 찾았습니다. 완전탐색(Brute-force)방법이었습니다. 다른 분들의 풀이를 보니 접근법은 같았네요. 흠.. 뭔가 마음에 들지 않습니다. 이따 핀 선생님에게 조언을 구해봐야겠습니다. 2023. 12. 10.
연습#9 Long Pressed Name 안녕하세요! 오늘도 풀었습니다. 사실 어제 밤에 풀었는데 너무 피곤해서 잠들고, 일어나서 올리네요. leetCode의 랜덤한 easy 하나인 long pressed name를 풀었습니다. 저의 접근법은 신선했으나 일부 논리에 허점이 있었고, 핀의 도움을 받아 풀었습니다. 이번 문제로 배운 점은 다음과 같습니다.문자열을 자르는 선택(substring)이 필요하다면, index를 가지고 뒤로 가지 않는 선택으로 대체할 수 있다.두 문자열을 비교해야 한다면 두 문자열 각각을 순회하면서 독립적으로 비교할 수 있다.루프를 꼭 하나의 인덱스로 해야한다는 편견을 버려라(ex. while 문으로 내부에 i,j,k… 만들 수 있다) 다음 문자열 유형의 문제가 나오면 적용해보려고 합니다. 할 수 있 다 ! 2023. 12. 10.
연습#8 의상 안녕하세요! 오늘도 한 문제를 풀었습니다. 프로그래머스 > 고득점kit > 해시의 level2 의상 문제였고, 힌트를 받아 정답을 맞혔습니다. 어제 'String을 기반으로 정보를 기록하고 관리해야할 때 무조건 해시를 써야 한다'는 가르침을 얻었습니다. 그래서 비록 해시 카테고리의 문제였지만, 아 해시를 써야 한다는 힌트들이 들어있구나! 생각했습니다. 해시를 사용하긴 했지만, 문제를 일반화하지 못했습니다^_ㅠ 예제를 가지고 수식을 만들다보면, (a+1)(b+1)...(n+1) - 1 라는 일반식이 도출됩니다. 저는 이 식으로 문제를 풀었습니다. 다른 분들의 풀이도 한 번 보았습니다. 같은 공식을 사용하였지만 stream을 통해 매우 명료하게 나타내셨습니다. Arrays.stream(clothes) .co.. 2023. 12. 8.
728x90