분류 전체보기 312

[백준 2608번] 로마 숫자 - java

문제 설명 1. 로마 숫자 2개가 주어진다. 2. 각 숫자들은 해당 방식으로 주어진다. 3. 작은 숫자가 큰 수 전에 오는 경우는 한 경우밖에 없으며, 해당 경우 큰 수에서 작은 수를 빼 준다. ex ) IV -> 4, XC -> 9, CM -> 900 4. III의 경우 3이 되며, 같은 알파뱃은 3번 연속으로 사용할 수 있다. 5. V, L, D는 한 번 밖에 사용할 수 있다. 풀이 과정 1. [1, 2, 3, 4, 5] 다섯 가지를 구하는 모든 방법이 존재한다. 2. java에서 문자열을 변경하는 방법을 사용하면 IV, XC처럼 특수한 경우를 쉽게 구할 수 있을 것이다. 3. 예를 들어 IV -> A, XC -> B로 하면 [A=4] [B=9] 이렇게 바로바로 판단 할 수 있을 것이다. 4. 이런 ..

알고리즘 공부 2021.05.16

[백준 1806번] 부분합 - java

문제 설명 1. 전체 숫자 N, 만들어야 하는 숫자 S가 주어진다. 2. N개의 숫자가 주어지고 숫자는 순서대로 더할 수 밖에 없다 3. S를 만들 수 있는 최소한의 숫자 개수를 return한다. 만약 만들지 못하면 0을 return한다. 풀이 과정 1. 연속된 순서를 구하는 방법은 다음과 같다. - 0번 인덱스부터 수를 더해 합이 S가 될 때까지 진행한다. - 숫자의 합이 S가 되면 지금까지 더한 숫자의 맨 앞 인덱스를 지우고 다시 판단한다. - 숫자를 뺀 뒤에도 S보다 숫자의 합이 더 크면 이전 단계를 다시 진행한다. - S보다 작아진 경우, 다음 인덱스를 더해 준다. 2. 이 방식을 통해 구할 수 있을 것이다. 3. 예를 들어 10 글자로 15를 만들려 한다면 ex ) - N = 10, S = 15..

알고리즘 공부 2021.05.10

[백준 1700번] 멀티탭 스케줄링 - java

문제 설명 1. 전체 플러그 개수 N, 전기용품 개수 K가 주어진다. 2. K개의 전기제품을 순서대로 플러그에 꽂을 것이다. 3. 가장 최소한으로 플러그를 뽑는 경우를 return하면 된다. 풀이 과정 1. 먼저 순서대로 플러그에 꽂아 준다. 2. 플러그와 전기용품을 확인해서 가장 적게 뽑는 방법을 구하면 된다. 3. 여러 가지의 경우의 수를 확인해서 풀어야 할 것이다. - 플러그가 이미 꽂혀져 있는 경우 그냥 기기를 쓰면 된다. - 플러그를 뽑아야 하는 경우 다시는 안쓰는 기기를 뽑으면 된다. - 모두 쓰게 되는 경우 가장 나중에 쓰게 되는 기기를 뽑으면 된다. 4. 각각의 풀이에서 순서대로 Grid로 진행하는데, 경우의 수를 고려해야 한다. 풀이(경우의 수 기입) 1. 먼저 플러그가 비어 있으니 전기..

알고리즘 공부 2021.05.09

[백준 1062번] 가르침 - java

문제 설명 1. 전체 단어 N, 가르칠 수 있는 글자 K가 주어진다. 2. 모든 단어는 'anta'로 시작되고, 'tica'로 끝난다. 3. 학생이 배울 수 있는 최대 단어의 개수를 return한다. 풀이 과정 1. 먼저 'a', 'n', 't', 'i', 'c' 다섯 글자는 공통적으로 들어가야 한다. 2. 기준을 글자로 잡고, 글자들에 따라 배울 수 있는 단어들을 return하면 될 것이다. 3. 예를 들어 7글자를 가르치고, 3개의 단어라고 한다면 ex ) - 위의 5글자는 무조건 배우게 된다. - 따라서 추가로 2글자를 더 배우는 모든 경우를 구하면 될 것이다. a~z까지 확인하여 배우지 않은 경우 가르친다. 1 - 'a' 'b' 'c' 'd' 'n' 't' 'i' 2 - 'a' 'b' 'c' 'e..

알고리즘 공부 2021.05.09

[프로그래머스] 프린터 - java

문제 설명 1. 프린트 뽑는 순서와 중요도가 정해져 있다. 2. 프린트를 순서대로 가져오는데, 현재 뽑을 예정인 순서의 프린트보다 중요도가 높은 것이 있으면 현재 순서의 프린트를 맨 뒤로 보내준다. 3. 중요도는 1~9로 존재하며 숫자가 클수록 중요하다. 4. location에 해당하는 프린트가 몇 번째로 뽑히는지 찾아 return하면 된다. 풀이 과정 1. queue에 넣어두고 하나씩 빼서 비교해 준다. 2. queue내에 현재 peek값보다 큰 중요도를 갖는 것이 있으면 현재 peek를 빼서 다시 넣으면 최후미로 이동할 것이다. 3. 해당 process를 계속 진행하면서 프린트가 뽑힐 때 마다 location을 하나씩 빼면서 진행해 주고, location이 0이고, 현재 값이 출력된 경우가 답이 된다..

알고리즘 공부 2021.05.02

[프로그래머스] 체육복 - java

문제 설명 1. 전체 학생의 수, 체육복을 도난당한 학생 위치, 여벌 체육복을 가진 학생 위치가 주어진다. 2. 여벌 체육복을 가진 K번째 학생은 자기 앞, 뒤의 학생 즉 K-1, K+1번 학생 둘 중 한명에게만 체육복을 빌려줄 수 있다. 3. 최대한 많은 학생이 체육을 들을 수 있게 여벌 체육복을 가진 학생이 빌려주어야 한다. 풀이 과정 1. 학생의 수가 주어지면 체육복을 빌려야 하는 학생은 -1, 빌려준 수 있는 학생은 1로 세팅해 준다. 나머지는 0이다. 2. 전체 학생을 돌아가면서 옷을 잃어버린 경우 빌리도록 한다. 3. 처음부터 끝까지 진행하기 떄문에 자기 뒤의 학생에게 쭉 옷을 빌리게 되면 최대값을 가질 수 있다. 4. 그런데 자기 뒤의 학생은 체육복이 없고, 앞의 학생에게 있는 경우가 있을 ..

알고리즘 공부 2021.05.02

[프로그래머스] 모의고사 - java

문제 설명 1. 수포자가 3명 있으며, 각각의 수포자는 다른 찍기 과정을 거친다. - 1번 수포자 : 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2..... - 2번 수포자 : 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3...... - 3번 수포자 : 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3..... 2. 가장 많은 문제를 맞힌 수포자를 찾아서 return한다. 3. 가장 높은 점수를 받은 사람이 여럿인 경우, 오름차순 정렬한다. 풀이 과정 1. 학생들의 문제 풀이 방법은 정해져 있다. 2. 미리 각각의 학생들의 문제 풀이 방법을 미리 배열에 담아 둔다. 3. 문제 수에 따라서 for문을 진행시키는데, for문의 인자를 학생들의 풀이 방식의 길이로 ..

알고리즘 공부 2021.05.02

[백준 1987번] 알파벳 - java

문제 설명 1. 보드에 문자를 통해 x, y축 표를 입력받는다. 2. 말은 왼쪽 맨 위에 위치한다. 3. 말은 상, 하, 좌, 우로 움직일 수 있으며 한번 지나온 칸은 다시 지날 수 없다. 4. 말이 시작해서 최대로 움직일 수 있는 칸을 return하면 된다. 풀이 과정 1. 간단한 DFS문제이며, check할 때에 조금만 주의하면 된다. 2. 각 움직이는 DFS의 진행마다 check의 기준을 다르게 해 주면 될 것이다. 3. 즉, (위, 아래, 오른쪽, 왼쪽)을 1DFS라고 치면, 1DFS - 2DFS - 3DFS...마다 check를 판단하고 이전의 DFS로 돌아가면 해당 check를 초기화한다. 4. char로 구할 필요 없이 int로 판단하고, A~Z까지 모든 경우를 check에 넣고 판단하면 더..

알고리즘 공부 2021.05.02

[백준 2607번] 비슷한 단어 - java

문제 설명 1. 첫 번째로 입력받은 단어에 대해, 두번째부터 마지막까지 단어를 비교한다. 2. 비교할 두 단어들의 알파뱃을 비교한다. 3. 하나를 '바꾸거나, 없애거나, 추가하거나, 그래도 두었을 때' 모든 알파뱃이 같으면 비슷한 단어이다. 4. 비교하여 비슷한 단어의 수를 구해 return하면 된다. 풀이 과정 1. 구현 자체는 간단하지만, 생각해야 하는 경우의 수가 많다. 2. 기본 가정은 두 단어 중 긴 쪽을 기준으로, 하나를 바꾸거나 없애거나 추가하거나 그대로 두어 비슷한 단어가 만들어지면 된다. 가정 1. 양쪽 단어의 길이가 차이가 난다면, 긴 쪽을 기준으로 생각하여야 한다. 2. 긴 쪽을 기준으로 위의 변환 과정을 거치려면 ( 긴 단어의 길이-1 )의 개수 만큼은 같은 단어여야 할 것이다. 3..

알고리즘 공부 2021.05.01

[프로그래머스] 완주하기 못한 선수 - java

문제 설명 1. participant로 전체 참가자의 이름이 주어진다. 2. completion에서 완주한 참가자의 이름이 주어진다. 3. 완주한 참가자의 숫자는 전체 참가자의 수보다 1이 적다. 즉 한명은 절대 완주하지 못한다. 4. 동명이인이 있을 수 있다(한명이 통과하여도 다른 사람이 통과하지 못할 수 있다) 풀이 과정 1. 전체 참가자와 완주한 참가자는 결국 한명의 참가자를 제외하고는 동일한 이름들이 들어가 있을 것이다. 2. 즉, 참여는 하였는데 완주를 못한 참가자를 찾으면 된다. 3. 이름이 아니라 참가번호로 생각해 본다면 참가자 : 1 2 3 4 5 6 7 완주자 : 1 2 3 5 6 7 이 경우, 4번 참가자는 완주하지 못한 것이다. 4. 그렇다면 두 배열을 정렬하고 처음부터 비교하면서, ..

알고리즘 공부 2021.05.01