전체 글 347

[프로그래머스] 체육복 - 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

[프로그래머스] 두 개 뽑아서 더하기 - java

문제 설명 정수 배열을 받아, 그 중 두 개의 수를 사용하여 만들 수 있는 수를 오름차순으로 return하는 문제이다. 풀이 과정 1. TreeSet은 값을 입력할 때 알아서 오름차순으로 배열해 주고, 중복을 제거해 준다. 2. 이 문제에서는 만들 수 있는 값을 모두 배열에 오름차순으로 담으라 하였으므로, 중복값은 버리고 오름차순으로 담을 수 있으면 된다. 3. 따라서 TreeSet을 사용하면 간단히 구현 가능할 것이다. 4. 두 개의 수를 더해서 가져오면 되므로 첫번째 수 ) 배열 처음부터 마지막 전까지 두번째 수 ) 처음 수 다음부터 끝까지 이렇게 해서 첫번째 수에 대해 구해진 모든 두번째 수를 treeset에 더하고, 이를 끝까지 진행하면 전체 값이 구해질 것이다. 코드

알고리즘 공부 2021.05.01

[프로그래머스] 크레인 인형뽑기 게임 - java

문제 설명 1. 인형을 크레인을 통해서 배열 안에서 가져오게 된다. 2. 크레인은 인형을 행이 아니라 열을 기준으로 뽑아오게 된다. 3. 즉, 위의 그림의 경우를 예를 들면 ( O이 인형이 있음, X는 없음 ) [ X X X X X ] [ X X O X O ] [ X O O X O ] [ O O O O O ] [ O O O O O ] 다음과 같이 나타날 것이고, 크레인은 위에서 아래 방향으로 인형을 뽑아올 것이다. 4. 인형이 없는 곳에서 크레인을 작동시키면 아무런 일도 일어나지 않는다. 5. 바구니는 모든 인형이 들어갈 만큼 큰 크기이며, 같은 인형이 들어가면 터져서 사라진다. 6. 터져서 사라지는 인형의 수를 return하면 된다. 풀이 과정 1. 크레인을 통해서 뽑아온 인형을 담는 통은 Stack으..

알고리즘 공부 2021.05.01