2024/02 15

📑 프로그래머스_연속 부분 수열 합의 개수_day15

알고리즘 챌린지 15일 차이다. 오늘은 바로 Level2에 분류된 원형 수열문제를 풀어보겠다. https://school.programmers.co.kr/learn/courses/30/lessons/131701 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 원형 순열의 문제를 푸는 사람들의 경우 보통 순열이 끊기지 않고 반복됨을 표현하기 위해서 배열을 두배로 확장해 이어 붙이는 경우가 있는데, 그럴 필요 없이 배열의 인덱스를 모드 연산으로 사용하면 된다. 쉽게 말해, 길이가 5인 배열{1,2,3,4,5}이 있는데 이 배열을 논리적으로 원형으로 이어져 있다..

📑 프로그래머스_택배상자_day14

알고리즘 챌린지 14일 차이다. 사실 어제 포스팅을 했어야 했지만, 어제는 지방에 당일 출장을 갔다가 올라와서 바로 기절해 버렸다.. 아예 넘길 순 없으니 오늘은 문제 두 개를 풀고자 한다. 프로그래머스 Level2 택배상자 문제로 정답률은 55%인 준수한 문제이다. https://school.programmers.co.kr/learn/courses/30/lessons/131704 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 택배가 나오는 메인 컨테이너 벨트는 FIFO구조로 나오게 되고, 택배를 트럭에 싣는 우선순위가 존재한다. 택배를 임시로 저장할 예..

📑 프로그래머스_요격 시스템_day13

알고리즘 챌린지 13일 차이다. 오늘은 프로그래머스 Level2로 분류된 요격 시스템 문제를 가져왔다. https://school.programmers.co.kr/learn/courses/30/lessons/181188 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 정답률을 보고 좀 어려운가 싶어서 다른 문제를 풀까 했지만 생각보다 쉽게 문제를 풀이할 수 있었다. 백준이나 프로그래머스나 아무리 문제를 풀어보아도 난이도 측정 기준은 아직도 모르겠다. 이 문제를 푸는 핵심 로직은 겹치는 구간을 일일이 세는 것이 아니라 반대로 끊기는 부분을 찾는 것이다. 로직..

📑 프로그래머스_귤 고르기_day12

알고리즘 챌린지 12일 차이다. 주말에 푹 쉬고 하니 확실히 상쾌하고 귀찮은 마음이 덜 생기는 것 같다. 목표를 향해 열심히 달려가는 것도 좋지만 역시 충분한 휴식이 병행되어야 한다는 점을 다시금 깨달았다. 오늘은 프로그래머스 Level2로 분류된 귤고르기 문제이다. https://school.programmers.co.kr/learn/courses/30/lessons/138476?language=python3 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해당 문제 또한 자료구조를 이용하면 쉽게 풀수 있는 문제로 최근에 풀었던 시소 짝꿍문제와 상당히 유..

📑 프로그래머스_리코쳇 로봇_Day11

알고리즘 챌린지 11일차이다. 아무리 생각해봐도 주말엔 쉬는게 좋아서 쉬기로 했다. ㅋㅋ 귀찮아서 그런게 아니고,, 좀 더 오랜 기간 동안 챌린지를 이어나가기 위함이다. 오늘도 프로그래머스 Level2에 분류된 BFS문제를 가져왔다. https://school.programmers.co.kr/learn/courses/30/lessons/169199?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 기존의 BFS 로직을 사용해 문제를 풀면 쉽게 풀이할 수 있지만 문제에서 주어진 조건에 따라 조금의 추가 수정을 거치면 되는 쉬운 문제이다..

📑 프로그래머스_시소짝꿍_Day10

알고리즘 챌린지 10일 차이다. 시작할 때는 조금 자신이 없었지만 어느덧 열흘 가까이하다 보니 자신감이 생기고 더 잘할 수 있을 것 같은 느낌이 샘솟는다. 오늘은 프로그래머스 level2에 분류된 시소짝꿍 문제를 가져왔다. 조건을 보자마자 완전 탐색(O(n^2))은 어려울 것이라는 생각이 들었을 것이다. 그렇다면 한 번의 반복(O(n))으로 시간 복잡도를 최적화하는 방법을 찾아보아야 한다. 간단하게 생각해보면 각 무게마다 1:1, 1:2, 2:3, 3:4 비율의 무게를 가진 사람이 몇 명 있는지 체크해보아야 한다. 경우의 수를 살펴보기 전에 문제에서는 자세하게 언급하지 않았지만 순서쌍이라고 했다. 그 말인 즉, 순서쌍에 포함되는 사람의 종류는 구분이 필요하지만 같은 사람끼리는 순서를 고려할 필요가 없다...

📑 프로그래머스_마법의 엘리베이터_Day9

알고리즘 챌린지 9일 차이다. 오늘은 프로그래머스 Level2에 분류된 마법의 엘리베이터 문제를 가져왔다. https://school.programmers.co.kr/learn/courses/30/lessons/148653 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 조건을 따지는 것이 크게 어렵지 않기 때문에 손으로 몇 번 써보면 금방 문제를 풀이할 수 있을 것이다. 결론적으로 모든 자릿수의 값을 0으로 만들어야 하는데, 위로 가냐 아래로 가냐의 차이일 뿐이다. 위로 가는 경우 다음 자릿수의 값이 +1이 되기 때문에 경우의 수를 조금만 더 꼼꼼히 챙겨..

📑 프로그래머스_호텔 대실_Day8

알고리즘 챌린지 8일 차이다. 막상 시작해 보니 어찌어찌하고 있기는 한데, 조금 더 열심히 하려면 주말은 쉬는 걸로 할 걸 그랬나 보다.. 다다음주에는 여행을 가니 할 수 있을 때 열심히 꾸준히 해야겠다. 오늘도 프로그래머스 Level2에 분류된 문제를 가지고 왔다. https://school.programmers.co.kr/learn/courses/30/lessons/155651?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 다양한 방법으로 풀 수 있겠지만 필자는 비교적 간단하게 구간합 알고리즘을 사용했다. 배열의 길이가 100..

📑 프로그래머스_광물캐기_Day7

알고리즘 챌린지 7일차이다. 오늘로서 설 연휴 마지막날이기도 하다. 스스로 자제하고 덜 나간것도 있긴하지만 약속이 좀 적었어서 집에서 알고리즘을 풀 수 있었던것 같다 ㅋㅋ 오늘은 프로그래머스 Level2로 분류된 광물 캐기 문제를 풀어보았다. 동적 계획법은 아니지만 그리디 알고리즘을 사용해서 풀이했다. 문제에서 주어진 조건만 잘 분석하면 풀 수 있는 쉬운 문제였다. 세 개의 곡괭이 중에서 하나를 골라(=그리디 알고리즘) 최소 피로도를 구한다. 한 곡괭이로 최대 5개의 광물을 캘 수 있다, 선택한 곡괭이는 다 쓸때까지 바꿀 수 없다. (= 5개씩 그룹화) 곡괭이를 다 쓰거나 광물을 다 캔 경우 종료한다. (= 반복의 탈출 조건) 코드의 주석을 달아놓았으니 이해가 어렵지 않을 것 같지만 핵심 로직을 간단히 ..

📑 프로그래머스_뒤에 있는 큰 수_Day6

알고리즘 챌린지 6일 차이다. 연휴 기간인 만큼 조금 쉬운 문제를 푸는 점은 양해 바란다... ㅎ 오늘은 자바로만 문제를 풀이해보고자 한다. https://school.programmers.co.kr/learn/courses/30/lessons/154539?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 간단하게 이중 반복문을 사용하여 완전탐색을 하면 쉽게 풀리겠지만, 배열의 크기가 최악의 경우 1,000,000이기 때문에 시간초과가 무조건 날 거다. 효율적이지도 않고. 이런 경우 특정한 알고리즘을 떠올리기 전에(명확하게 눈에 보이..

📑 프로그래머스_연속된 부분 수열의 합_Day5

알고리즘 챌린지 5일 차이다. 오늘은 정말 아슬아슬했다. 한 잔 하러 나갔다가 마음을 돌려 집에 와서 알고리즘을 풀었다. 오늘도 마찬가지로 프로그래머스 Level 2 에 분류된 문제이다. 문제가 익숙한 듯 어려운 듯 쉽지만 슬라이딩 윈도 기법을 알고 있다면 생각보다 쉽게 풀이할 수 있다. https://school.programmers.co.kr/learn/courses/30/lessons/178870?language=python3 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 부분 수열을 나타낼 시작과 끝 포인터를 논리적으로 만들어준다. 포인터를 하나씩..

📑 프로그래머스_아날로그시계_Day4

알고리즘 챌린지 4일 차이다. 오늘부터 설 명절 연휴가 시작되었다. 오전에 가족들과 당일치기로 강릉을 다녀와서 그런지 너무 피곤해가지고 오늘은 스킵할까 고민해 봤지만, 꾹 참고 그래도 한 문제만 풀기 위해 컴퓨터를 켰다. 오랜만에 알고리즘을 푸는 것이라 천천히 감을 되찾으려고 프로그래머스 level2만 먼저 풀어보고 있는데,,, 오늘 고른 문제는 진짜 안그래도 피곤해서 그런지 포기할까 싶었다. ㅋㅋㅋ Level2치고 너무 어려운 거 아닌가...? 싶을 정도였다. 정답률이 11%이길래 긴가민가 하다가 얼마나 어렵겠어 했는데 따져야 할 조건이 너무 어렵고, 접근 자체도 간단한 듯 간단하지 않았다. 이해가 어려울 것 같기 때문에 하나하나 차근차근 최대한 상세하게 설명해 보도록 하겠다. 오늘은 파이썬 말고,, ..