본문 바로가기

전체 글

(27)
[프로그래머스] 풍선 터트리기 Lv.3 코딩테스트 연습 - 풍선 터트리기 [-16,27,65,-2,58,-92,-71,-68,-61,-33] 6 programmers.co.kr 알고리즘 공부를 본격적으로 시작한지 3개월이 되어가는 오늘, 실력이 점차 늘어간다는 느낌을 받는다. 월간 코드 챌린지에 도전하면서 세번째 문제였던 풍선 터트리기 문제에서 끝까지 66.7점을 받고 결국 2.6솔을 하고 끝났었다. 해당 문제가 프로그래머스에 업데이트 된 1일 후 오늘 다시 도전하였고, 효율성을 올려서 결국 100점을 받았다. 첫번째 시도 처음에는 임의의 위치를 기준으로 왼쪽 그룹과 오른쪽 그룹으로 나눈 후, 각각의 그룹에 있는 원소들과 기준 위치 값을 비교하여 만약 기준 위치 값 보다 작은 값이 그룹에 있을 때, count를 늘리는 식으로 코드를 짰었다. ..
[java] 입력받은 문자열 처리하는 다양한 방법 입력으로 문자열 str 이 주어질 때, 이를 편리하게 이용할 수 있도록 변환하는 여러가지 방법이 있다. 1. toCharArray() 사용하여 문자열을 문자 배열로 변환 // string 을 문자 배열로 변환 char[] ch = str.toCharArray(); // 문자열로 반환 return new String(ch); // 1 return String.valueOf(ch); // 2 2. StringBuilder 사용하여 append, setCharAt 메소드 등 이용 StringBuilder sb = new StringBuilder(str); for(int i=0;i
[LeetCode/리트코드] 3Sum leetcode 의 3sum 문제는 많은 깨달음을 얻게 한 문제 중 하나이다. 처음에 문제를 보자마자 투포인터 방법으로 풀면 된다고 느꼈지만, 사실 투포인터 문제를 직접 풀어본적이 없었고 그래서 hashset 으로 접근을 하였다. 그런데, hashset 으로 접근을 하게 되면, 결국 완전탐색으로 모든 수를 탐색하면서 중복을 제거해나가는 방식이 되기 때문에 효율성이 떨어진다. 또한 처음에 hashset으로 풀이를 했을 때 얕은복사를 하는 바람에 마지막에 listIn.clear() 를 하면서 출력 리스트에 있는 값이 덩달아 날아가게 되는 문제도 겪었다. 마치 DFS 문제를 풀 때, 재귀호출하는 부분에서 값의 변형이 일어난 후에 재귀호출을 하면 출력이 이상하게 나오는 것과 비슷하다는 느낌을 받았다. 예전 어떤..
[알고리즘] 그리디(greedy) + 힙(heap) 을 같이 써보자 코딩테스트 연습 - 라면공장 라면 공장에서는 하루에 밀가루를 1톤씩 사용합니다. 원래 밀가루를 공급받던 공장의 고장으로 앞으로 k일 이후에야 밀가루를 공급받을 수 있기 때문에 해외 공장에서 밀가루를 수입해야 합니�� programmers.co.kr 이 문제는 이틀에 걸쳐서 4가지 방법으로 푼 문제이다. (사실 힙으로 한번에 풀고 재미삼아 다른방법으로도 풀어봤다) 1. 전체탐색 1-1. DFS - 재미삼아 이렇게 풀어봤다가 4시간동안 삽질끝에 결국 풀었지만, 효율성에서 영혼까지 털렸다. 2. 그리디 2-1. getMax 를 이용한 풀이 2-2. Collections.sort 를 이용한 풀이 2-3. 우선순위 큐를 이용한 풀이 역시 가장 효율성이 높은 방법은 4번째 방법이다. 그 이유는 현재 stock 으로..
[알고리즘] 우선순위큐(힙)는 왜, 언제 사용해야 할까 언제, 왜 우선순위 큐를 사용해야 하는가? 문제를 풀 때, 원소를 삽입 또는 삭제 후 매번 정렬을 해야하는 문제가 있다. 이럴 때에는 Collections.sort 와 같은 퀵정렬을 이용하게 되면 시간복잡도가 nlogn 이다. 이때 원소의 개수가 1e6 이상인 경우에 퀵정렬 시간복잡도는 1e8 을 넘어갈 수 있게 된다. 따라서 이때에는 우선순위 큐를 활용하여야 원소를 삽입 또는 삭제할 때 마다 nlogn 이 아닌, logn 의 시간복잡도로 정렬할 수 있게된다. 적용 가장 대표적인 문제는 프로그래머스의 '더 맵게' 문제이다. https://programmers.co.kr/learn/courses/30/lessons/42626?language=java 풀이1 위 코드는 내장 sort 를 이용하여 원소를 삭제..
HashSet 에 011 을 넣으면 왜 11이 아닌 9가 나올까? 소수찾기 문제를 풀던 도중 hashset 에서 막혀서 자바 책을 뒤적이다가 알아낸 것을 기록한다 즉, 소수찾기 문제에서는 입력으로 string 이 들어왔기 때문에 이를 Integer 로 변환 할 때 자동으로 default 값이 10진수변환으로 배정이 되어있기 때문에 011 이 11로 인식이 된 것이고 따라서 011 과 11 이 둘의 중복을 제거하여 최종적으로 11이 나온 것을 알 수 있다.
[코테준비] 전체탐색으로 문제를 해결하자 - 1 들어가기에 앞서 단순히 문제를 많이 풀고 이를 통해 얻어진 내공으로 직관적으로 문제를 푸는 것은 한계가 있다. 알고리즘을 본격적으로 공부한지 7일차가 되는 오늘 내가 느낀 것은 바로 이것이다. '알고리즘은 수학문제 풀이와 사고과정이 비슷하다' 특히 수능 30번,21번 문제를 푸는 사고과정과 닮아있음을 체감하였다. 여담이지만, 알고리즘(코딩테스트) 은 '정시' 와 닮았고 포트폴리오(프로젝트)는 '수시 스펙'과 닮은 것 같다. 전체탐색으로 문제를 풀어보자 시뮬레이션 보통 시뮬레이션 문제는 특징이 다음과 같다. 문제에서 주어진 처리를 수행하기만 하면 되는 간단한 내용이 주를 이룬다 "이런 과정을 거쳐서 나온 결과가 무엇인가?" 라고 물어보는 문제가 많다. 전체탐색 vs 시뮬레이션 시뮬레이션 : 수행해야 하는 ..
[러닝일지] 새로운 시작 - 복귀 7일차 한주를 돌아보며 - TMI. 어느덧 복귀를 한지 7일차가 되었다. 시험이 끝나기도 했고 날씨도 다시 좋아지고 여러모로 뛰기 좋은 날인 것 같아서 11시 16분쯤에 나갔다. 오늘 알고리즘 문제를 풀면서 좀 답답하기도 했었고, 요즘 집안 분위기도 썩 좋지 않은 탓에 슬럼프가 올뻔 했지만 무사히 빠르게 넘긴 것 같다. 세상일이 다 내뜻대로 되면 얼마나 좋을까? 가고 싶은 회사도 여러개 골라놓고 선택해서 갈 수 있다면 얼마나 좋을까.. 20살때 나도 그렇게 열심히 했었는데, 6년이 지난 지금 내가 그보다 더 못할 이유는 없다는 생각이 든다. 그때보다 더 체력도 좋아졌고, 발목과 어깨부상으로 그만두었던 근력운동도 다시 시작하면서 온몸에 짱짱함을 느끼는 지금은 어느때보다 최고의 컨디션이라고 생각한다. 그러니까 다 ..