반응형

알고리즘 144

[프로그래머스]JAVA - Level1. 폰켓몬

https://school.programmers.co.kr/learn/courses/30/lessons/1845 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 홍 박사님의 총 폰켓몬의 절반을 최대한 다양한 폰켓몬으로 선택하는 문제이다. 중복없이 선택을 해야하기 때문에 바로 HashSet이 떠올랐다. HashSet을 이용하면 중복은 자동으로 제거가 되기 때문에 문제가 매우 간단해진다. 우선 총 폰켓몬을 전부 HashSet에 넣어서 중복을 제거한다. 이후에 HashSet의 사이즈가 총 폰켓몬의 절반을 넘으면 총 폰켓몬의 절반을 answer에 넣어주고, ..

[프로그래머스]JAVA - Level1. 소수 만들기

https://school.programmers.co.kr/learn/courses/30/lessons/12977 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 배열 nums에서 임의의 숫자 3개를 선택하여 해당 수의 합이 소수가 되는 경우의 수를 구하는 문제이다. 소수란 1과 자기 자신 외의 약수를 가지지 않는 1보다 큰 자연수이다. 우선 배열에서 숫자를 가져올 때 3중 for문을 쓰는 게 생각났다. 하지만 너무 비효율적이라고 생각해서 고민해봤는데 도저히 답이 안나왔고, 구글링을 했을 때도 3중 for문을 써서 해결한 게 대부분이였다. for (i..

[프로그래머스]JAVA - Level1. 신고 결과 받기

https://school.programmers.co.kr/learn/courses/30/lessons/92334 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 해당 문제는 왜 Level 1로 되어있는지 잘 모르겠다... 문제에 중복을 제거해야하는 특징이 있기 때문에 HashMap과 HashSet을 사용하면 좋을 것 같다고 생각했다. 이후에 신고자와 대상자를 나눠서 HashSet을 대상자 기준으로 배열을 만들어 해결했다. HashSet[대상자] 배열에 신고자를 입력해주면 자동으로 중복이 제거 되므로 중복 문제를 쉽게 해결할 수 있다. for (Str..

[프로그래머스]JAVA - Level1. 최소직사각형

https://school.programmers.co.kr/learn/courses/30/lessons/86491 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 명함을 옆으로 돌려서 넣을 수 있다는 가정이 있기 때문에 가로, 세로 값이 아닌 각 명함의 큰 값과 작은 값으로 나누는게 좋다. 1. 각 명함의 크기에 큰 값과 작은 값으로 구분한다. 2. 가로 (큰 값)을 비교하면서 가장 큰 값을 찾는다. 3. 세로 (작은 값)을 비교하면서 가장 큰 값을 찾는다. 4. 가로 (큰 값) 과 세로 (작은 값)을 곱해서 지갑의 크기를 구한다. class Solu..

[프로그래머스]JAVA - Level1. 같은 숫자는 싫어

https://school.programmers.co.kr/learn/courses/30/lessons/12906 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 이번 문제는 배열로 푸는 게 훨씬 쉽다고 생각했다. 하지만 문제가 스택/큐로 분류가 되어있으니까 스택을 이용해서 풀어보려고한다. preNum이라는 변수에 배열 arr에 들어갈 수 없는 임의의 숫자를 넣어준 후에 인접한 숫자가 같은 수가 아니면 queue에 넣어주면 끝이다. import java.util.*; public class Solution { public int[] solution(i..

[프로그래머스]JAVA - Level2. 가장 큰 수

https://school.programmers.co.kr/learn/courses/30/lessons/42746 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 이번 문제도 풀이를 봤다.. 내 알고리즘 실력은 언제쯤 성장할 것인가.. 우선 int 형의 numbers 변수를 String 형태로 변환해야하는 것은 알고 있었다. 하지만 아무리 생각해도 어떤식으로 숫자를 비교하면서 정렬해야하는지 감이 잡히지 않았다. 다른 분들의 풀이를 봤더니 Comparator 클래스를 이용해서 첫 번째 인자와 두 번째 인자를 비교해서 문제를 해결했다. 1번 예제의 경우 ..

동적 계획법 (Dynamic Programming) 정의 및 구현 방법

안녕하세요. 두부입니다. 다양한 알고리즘 문제를 해결하다 보면 깊이 우선 탐색, 너비 우선 탐색, 동적 계획법 등 다양한 문제 해결 방법을 접할 수 있는데요. 이번에 알아보고자 하는 건 동적 계획법 (DP)입니다. 동적 계획법 정의 하나의 문제를 작은 문제로 단순화한 다음 점화식으로 만들어 재귀적인 구조를 활용해서 큰 문제를 해결하는 방식으로 피보나치 수열에서 시작되었다. Q. 일반적인 재귀 방식과 매우 유사한 동적 계획법을 사용하는 이유는 뭘까? A. 일반적인 재귀 방식을 사용할 경우 동일한 작은 문제들이 여러 번 반복되며 비효율적인 계산으로 빠질 수 있다. 동적 계획법은 작은 문제들을 재활용해서 사용하는 방식이기 때문에 이러한 문제에서 일반적인 재귀 방식보다 유리하다. Q. 동적 계획법의 사용 조건은..

알고리즘/이론 2022.08.31

[프로그래머스]JAVA - Level2. 기능 개발

https://school.programmers.co.kr/learn/courses/30/lessons/42586 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 세상에 중간 단계의 알고리즘은 없는 걸까? 체감상 순한맛, 매운맛밖에 없는 것 같다.. 이번 알고리즘 문제는 배열로만 해결할 수도 있고, Queue를 이용해서 해결해도 된다. 문제에서 요구하는 건 Queue로 해결하는 방법이기 때문에 Queue를 이용해서 풀어봤다. 우선 progresses 와 speeds 를 이용해서 배포가 가능한 날짜를 구해서 Queue에 넣어줘야 한다. 배포가 가능한 날..

[프로그래머스]JAVA - Level3. 코딩 테스트 공부

https://school.programmers.co.kr/learn/courses/30/lessons/118668 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 2022 Kakao tech internship 알고리즘 문제를 1번부터 차근차근 풀어보고있는데 3번부터 어렵다... 이것저것 해보다가 검색해봤더니 동적 계획법 (Dynamic Programming) 을 사용해야하는 문제이다. 동적 계획법이란 복잡한 문제를 여러 개의 작은 부분 문제로 나누어서 문제를 해결하는 기법으로 Bottom_Up 과 Top_Down 방법 두 가지가 존재한다. Top_..

[프로그래머스]JAVA - Level1. 성격 유형 검사하기

https://school.programmers.co.kr/learn/courses/30/lessons/118666 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 선택지에 따라 8가지의 mbti에 점수를 입력해야하므로 HashMap 을 쓰면 간단하게 풀 수 있다. HashMap 의 key 값에 8가지의 mbti 유형을 넣어주고 value 값을 모두 0으로 선언한다. choice 길이 만큼 반복문을 태워서 switch 문을 이용해서 점수를 입력해주었다. 이후에 서로 상이한 mbti 끼리 점수를 비교해서 큰 값을 answer 변수에 차례대로 입력하면 된..

반응형