알고리즘 공부 150

[프로그래머스] N으로 표현 - java

문제 설명 1. 숫자 N과 number이 주어진다. 2. number을 N을 사용해서 만들 수 있는 경우가 여러 가지 있는데, 이 중 최소횟수를 구한다. 3. 8회 초과이면 -1을 return한다. 풀이 과정 1. DP문제인데 나는 DFS랑 최적해를 섞어서 푼것같다.... DP만으로 푸는 방법은 모르겠음...... 2. N을 통해 +-/*를 해서 구할 수 있는 모든 방법을 구한다. 3. 위의 process를 전체 문자열의 길이만큼 진행하면 구할 수 있다. 4. 그리고 N뿐만 아니라 NN NNN 이런것도 가능하다. 참고로 이경우 count는 당연히 하나 늘어날 것이다. 5. 마지막으로 중요한게 8회 초과이면 -1을 리턴하도록 만들면 된다. tip ) 그리고 시간복잡도를 조금이나마 줄이는 방법인데, 어차피 ..

알고리즘 공부 2021.09.02

프로그래머스 위클리 챌린지 5주차 - java

문제 설명 1. 'A' 'E' 'I' 'O' 'I' 다섯글자로 단어를 만들수 있다. 2. 단어 길이는 5개 이하이며, A AA AAA AAAA AAAAA AAAAE ... 이런 순서로 진행된다. 3. 단어가 주어지면, 이게 몇번째 단어인지 return하면 된다. 풀이 과정 1. 문제의 테스트 케이스를 보면 알겠지만, 문자들에 대해 완전탐색을 하나하나 진행하면 절대 안될것이다...안해봤지만 그럴것같음. 2. A로 시작하면 A, AA ..... E로 시작하면 E, EA ....... 이렇게 진행되는데, 이를 통해 수식을 통해 구할 수 있다고 유추 가능하다. 3. A는 1이고, I는 1563인데 이를 통해 E는 782이고 각각 시작하는 문자를 기준으로 781의 간격이 떨어져 있다. 4. A,E,I,O,U 5글..

[프로그래머스] 정수 삼각형 - java

문제 설명 1. 삼각형이 주어진다. 2. 맨 아래까지 삼각형을 하나씩 더해가면서 그 최대값을 구한다. 3. 맨 아래줄에서 최대값을 구해주면 된다. 풀이 과정 1. 간단한 DP 문제이다....이게 왜 level3일까?? 2. 각 삼각형 위치에서 가장 큰 합을 구하는 배열을 만들어 준다. 3. 맨 왼쪽은 무조건 다 왼쪽으로 이동해야 하므로 0, 0부분은 싹다 현재 삼각형 크기와 위의 크기를 더해주면 된다. 7 - 3 - 8 - 2 - 4 (이렇게 왼쪽으로 가는거는 쭉쭉 더해주면 될것이다. 다른 방법은 없다.) 4. n번째 위치의 최대값은 그보다 윗 칸의 왼쪽에 있는 값, 오른쪽에 있는 값중 큰거를 구하면 된다. 5. 이제 맨 아래 위치의 값들 중 최대값을 return하면 된다. 코드 class Solutio..

알고리즘 공부 2021.08.26

프로그래머스 위클리 챌린지 4주차 - java

저번주와 비교도 안되게 쉬운 문제가 나왔다...뭐지..... 문제 설명 1. table로 맨 처음 노드에는 직무가, 이후 노드부터는 그 직무가 선호하는 언어가 주어진다. 2. table의 선호하는 언어의 점수는 table전체 언어의 개수만큼 시작해서 내려갈수록 하나씩 뺸다 ( 예를 들어, 선호언어 6개 중 2번째로 선호하는 언어의 경우 (6-2=4점) 3. languages와 preference의 길이는 같고 해당 languages 점수는 동일 위치 preference가 된다. 4. table언어 선호도 x preference를 구하고, 그 언어 선호도의 총합이 가장 높은 직무를 return한다. 5 동일한 점수의 직무가 있으면 사전순으로 빠른 직업군을 return한다. 풀이 과정 1. 언어들을 짤라서 ..

프로그래머스 위클리 챌린지 3주차 - java

(원래 전부터 풀던건데 테케 3개를 통과 못해서 안되고있었다....바보같이 한줄을 빼먹어서 그랬다. 그래서 다른 공부도 못하고 진도가 느려짐.......) 문제 설명 1. board와 table이 각각 배열로 주어진다. 2. 0은 빈칸, 1은 블록으로 채워진 부분이다. 3. board의 빈 부분을 table의 블록으로 채워주면 된다. 4. 블록은 회전할 수 있고, 뒤집을수는 없다. 빈칸은 하나의 블록으로 딱 맞게 채워야만 한다. 이를 채우면 이렇게 되는 것이고, 답은 '14'를 return하게 된다. 풀이 과정 진짜 힘들게 구했다...풀이 알고리즘 자체는 생각하기 쉬운데, 이를 구현하는 것이 힘들다. 1. 먼저 각각 game_board의 경우는 빈칸(0) , table의 경우는 블록(1) 에 해당하는 것..

[백준 1149번] N과 M(2) - java

문제 설명 1. 숫자 N, M을 입력받는다. 2. 1부터 N까지의 중복 없는 숫자를 사용하여 M의 길이를 갖는 순열을 만든다. 3. 오름차순으로 출력한다. 풀이 과정 1. 간단한 백트래킹 문제이다. 2. 숫자를 하나씩 만들어가다가 M의 길이에 도달하면 출력하면 된다. 3. 간단하게 1에서 만들수 있는수, 2에서 만들수있는수....이렇게 하면 중복 체크 필요 없이도 구현이 충분이 가능하다. (중복없이 구현하는게 더 효율적일 것 같아서 구현 방법을 바꾸었다.) ex) (N=4, M=3인 경우) 1, 2, 3, 4 네 가지의 숫자가 있고, 숫자는 오름차순으로 출력하여야 한다. 줄 1 1 2 줄 2 2 3 줄 3(출력) 4(출력) 4(출력) 위의 표를 보면, 위에서 아래로 숫자가 만들어 지고, M과 줄이 같아지..

알고리즘 공부 2021.08.15

[백준 16496번] 큰 수 만들기 - java

문제 설명 1. 음이 아닌 정수 N개가 들어있는 리스트가 주어진다. 2. 이걸로 만들 수 있는 가장 큰 수를 return한다. 3. 답이 0이면 무조건 0하나만 출력되어야 한다. 0이 아닌 모든 수는 0으로 시작하지 않는다. 풀이 과정 1. 진짜 쉽게보고 풀었는데 생각보다 난이도가 있었다.. 또 다 풀어놓고 뻘짓해서 시간 엄청 보냈다. 문제의 내용을 잘 읽어봐야 할 것이다. 2. 먼저 입력은 String으로 입력받는다. 이걸 사용하면 더 쉽게 풀 수 있다. 3. 입력받은 String들을 배열로 만들고 내림차순으로 정렬한다. 45,4,44,43,42,41 그런데 위의 3까지만 진행하면 이렇게 정렬될 것이다. -> 45,44,43,42,41,4 이걸 해결하는 방법을 생각해 보았는데, '4'라는 자리수로 시작..

알고리즘 공부 2021.08.14

[백준 1149번] RGB 거리 - java

문제 설명 1. 집의 수 N을 입력받고, 집은 R, G, B 세 가지 색으로 칠해질 수 있다. 2. 총 N개의 집에 대해 R, G, B 색으로 칠하는 금액을 입력받는다. 3. 현재 집을 기준으로 위, 아래 집과 색이 달라야 한다. 3. 전체 집을 칠하는 데 가장 적게 드는 금액을 return 한다. 풀이 과정 1. 전형적이고 간단한 DP문제이다. 2. 문제에서 현재 집 기준으로 위, 아래 집과 색이 달라야 한다고 하는데, 굳이 위아래 다 구할 필요 없이, 현재 집 기준으로 아래에 위치한 집과 색이 다르게 구하면 될 것이다. 3. 현재 칠할 장소를 기준으로 가장 적은 금액으로 칠한 장소를 구하면 될 것이다. ex) 빨강 초록 파랑 1번집 5 3 2 2번집 6 1 3 3번집 7 5 4 4번집 1 6 2 5번..

알고리즘 공부 2021.08.12

프로그래머스 위클리 챌린지 2주차 - java

문제 설명 1. 학생들이 각각 모든 학생들의 채점을 한다. 2. 참고로 배열에서 세로로 채점한다. 가로로 생각했다가 시간 버림... 3. 자신이 채점한 점수가 유일한 최대/최소값이면 빼고 계산한다. 4. 90점 이상 : A, 80점 이상 : B, .... , 50미만 : F 이렇게 해서 구한 답을 return하면 된다. 풀이 과정 1. 간단하게 구하는 방법을 생각해 보았는데, 나는 찾지 못하겠다... 2. 일단 자기 점수를 계산해 두고, 이게 최대나 최소에 모두 해당하지 않는 경우인지 알아야한다. 3. 자기 자신의 값이 유일한지를 찾아낸 후 그 값을 빼고, 나누는 값도 빼준다. 4. 총 답을 구해주면 된다.... 그냥 반례 잘 생각하면 돼서 풀이는 사실 별게 없다. 코드

프로그래머스 위클리 챌린지 1주차 - java

위클리 챌린지가 있길래 한번 끝까지 다 해보도록 했다... 문제 설명 1. 원래 이용료, 내가 가진 돈, 이용 횟수를 입력받는다. 2. 이용 횟수에 따라 가격이 계속 증가한다. 3. 내가 가진 금액에서 얼마가 부족한지 return하고, 부족하지 않으면 0을 return하면 된다. 풀이 과정 1. 본래 푼 방식은 그냥 이용 횟수까지 쭉쭉 더해가면서 진행했다. 2. for문으로 돌려서 구하고, 그것에서 기본 금액 money을 빼준 후에, 이게 0보다 작으면 0을 return했다. 3. 풀이 자체는 간단한데 더 편한 방법이 있었다. 코드 이후로 다른 사람의 풀이가 있었는데, 훨씬 간단하고 좋은 풀이가 있었다. 풀이 과정 1. 전체 이용 금액의 경우는 기본 이용금액 * ( 이용횟수 * (이용횟수+1) / 2 )..