본문 바로가기

개발 - Coding/Algorithm12

[Python] 프로그래머스: 광물 캐기 https://school.programmers.co.kr/learn/courses/30/lessons/172927 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해결 방법 이 문제의 경우 DFS, BFS로 풀 수도 있지만, 그리디 알고리즘으로 푸는 것이 최선이라고 생각합니다. 먼저 5개가 한 단위가 되기 때문에, 5개씩 끊고 다이아몬드, 철, 돌 곡갱이를 사용했을 때 피로도를 계산해놓으면 돌 곡갱이를 사용했을 때를 기준으로 내림차순 정렬하면 최선의 경우의 수를 찾을 수 있습니다. 이렇게 해결할 수 있는 이유는 돌, 철, 다이아몬드를 비교했을 때 효율이 .. 2023. 3. 28.
[Python] 프로그래머스: 호텔 대실 https://school.programmers.co.kr/learn/courses/30/lessons/155651 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 이 문제는 두 가지로 풀이 가능합니다. 1. Python의 datetime과 같은 시간 관련 모듈을 이용해서 푸는 것 2. 모든 시간을 분으로 환산하여 table을 만든 다음, 시작 시간과 종료 시간을 기록하고 부분합으로 푸는 것 제한 사항에서 명시하는 범위가 작기 때문에 어느 쪽으로도 풀이가 가능합니다. datetime과 같은 시간 관련 모듈을 이용하여 정석적으로 풀고 싶은 경우 첫 번째 풀이.. 2023. 2. 6.
[Python] 프로그래머스: 둘만의 암호 https://school.programmers.co.kr/learn/courses/30/lessons/155652 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 두 문자열 s와 skip, 그리고 자연수 index가 주어질 때, 다음 규칙에 따라 문자열을 만들려 합니다. 암호의 규칙은 다음과 같습니다. 문자열 s의 각 알파벳을 index만큼 뒤의 알파벳으로 바꿔줍니다. index만큼의 뒤의 알파벳이 z를 넘어갈 경우 다시 a로 돌아갑니다. skip에 있는 알파벳은 제외하고 건너뜁니다. 예를 들어 s = "aukks", skip = "wbqd",.. 2023. 2. 2.
[Java & Python] 프로그래머스: 택배상자 https://school.programmers.co.kr/learn/courses/30/lessons/131704?language=python3 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이 택배는 1부터 n까지 순서대로 들어옵니다. 택배 순서와 스케줄이 맞으면 바로 처리하고, 그렇지 않으면 무조건 서브컨베이어에 넣습니다. 그 후 서브컨베이어와 스케줄을 비교하여 맞으면 계속 처리합니다. n번째 택배까지 처리한 다음 처리된 만큼의 택배 숫자를 반환합니다. Stack과 Queue 자료형을 잘 활용하는 것이 중요한 문제였습니다. 단, Python의.. 2022. 12. 29.
[Java & Python] 프로그래머스: 롤케이크 자르기 https://school.programmers.co.kr/learn/courses/30/lessons/132265?language=python3 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 해설 리스트를 잘라서 중복되지 않는 원소를 세는 식으로 풀 수 있는 문제입니다. 다만 일부 원소를 추출하여 집합형 자료형으로 만드는 과정이 시간 효율성이 떨어지기 때문에 이와 같은 방식으로는 풀 수 없습니다. Hash를 이용한 자료형을 이용해서 원소를 세서 문제를 해결할 수 있습니다. Java import java.util.*; class Solution { .. 2022. 12. 19.
[Python & Java] 프로그래머스: 우박수열 정적분 https://school.programmers.co.kr/learn/courses/30/lessons/134239?language=python3 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 콜라츠 추측이란 로타르 콜라츠(Lothar Collatz)가 1937년에 제기한 추측으로 모든 자연수 n에 대해 다음 작업을 반복하면 항상 1로 만들 수 있다는 추측입니다. 1-1. 입력된 수가 짝수라면 2로 나눕니다. 1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다. 2.결과로 나온 수가 1보다 크다면 1번 작업을 반복합니다. 예를 들어 주어진.. 2022. 12. 17.
[Python] 프로그래머스: 디펜스 게임 프로그래머스: 디펜스 게임 https://school.programmers.co.kr/learn/courses/30/lessons/142085 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 명세 문제 설명 준호는 요즘 디펜스 게임에 푹 빠져 있습니다. 디펜스 게임은 준호가 보유한 병사 n명으로 연속되는 적의 공격을 순서대로 막는 게임입니다. 디펜스 게임은 다음과 같은 규칙으로 진행됩니다. 준호는 처음에 병사 n명을 가지고 있습니다. 매 라운드마다 enemy[i]마리의 적이 등장합니다. 남은 병사 중 enemy[i]명 만큼 소모하여 enemy[i]마리.. 2022. 12. 12.
Junit assertArrayEquals를 이용하여 array 비교하기 java array 비교하기 Junit을 이용해서 결과를 테스트하다보면, array를 비교해야 할 경우가 생긴다. 이런 경우에 단순히 assertEquals 메서드를 이용해서 비교하면 테스트에 실패한다. 두 array가 다른 객체이기 때문에 다른 메모리 주소를 참조하기 때문이다. 예시 프로그래머스에서 간단한 행렬의 덧셈 문제를 풀고, Junit으로 검증해보겠다. // 내가 작성한 답 public class Solution { public int[][] solution(int[][] arr1, int[][] arr2) { int outerLength = arr1.length; int innerLength = arr1[0].length; int[][] answer = new int[outerLength][i.. 2022. 7. 21.