📖 문제 https://www.acmicpc.net/problem/22233 💡 풀이 방식• Map1. Map에 (단어, 현재 단어가 쓰였는지 나타내는 숫자)를 저장한다. (1: 메모장에 남음 / 0 : 메모장에 없음)2. M개의 정보를 돌며 콤마 단위로 단어를 분리한다. 분리한 단어가 현재 단어장에 있고 쓰인 적 없는 단어(1)라면, 쓰였다고 변경하고(0) 메모장에 남은 단어 수를 -1하고 M번 결과를 출력한다. 🔺 코드1234567891011121314151617181920212223242526272829303132import java.util.*;import java.io.*; public class Main { public static void main(String[] arg..
📖 문제 https://www.acmicpc.net/problem/1863 💡 풀이 방식• 스택. 건물의 높이(y)가 달라지는 걸 확인하기 위해 스택을 활용한다. - 건물의 높이가 낮아진 경우 > 뒤에 있는 건물이 끝났다는 의미. 스택이 비지 않을 때까지 한 빌딩과 해당 빌딩과 같은 높이의 빌딩을 같은 빌딩으로 취급하며 제거- 건물의 높이가 같은 빌딩인 경우 > skip- 건물의 높이가 높아진 경우 > 스택에 push해 최고층 높이의 건물 갱신 💥 유의사항- 입력을 다 받았는데 스택에 값이 남아있다면, 건물이 남아있는 것과 마찬가지이므로 남아있는 값의 갯수만큼 하나의 건물로 취급해 건물 갯수를 센다. 🔺 코드123456789101112131415161..
📖 문제 https://www.acmicpc.net/problem/20006 💡 풀이 방식• 구현, 시뮬레이션필요 자료구조- 플레이어 레벨, 이름, 방에 들어갔는지 여부 저장하는 Player 객체- 플레이어 정보 저장용 배열 . p개의 플레이어 정보를 입력받을 Player 배열을 생성한다. . p개의 플레이어 정보를 입력받는다. . 현재 i번째 플레이어가 이미 방에 배치된 플레이어가 아니고, 레벨 차이가 10 이하라면, 방에 추가한다. . 이름 순으로 정렬한 후 출려갛기 위해 플레이어 이름으로 정렬한다. . 방의 정원이 모두 찬 경우, 게임을 시작한다. / 그게 아니라면 대기를 출력한다. . 현재 i번쨰 방에 있는 플레이어 정보를 모두 출력한다. 🔺 코드12345678910111213141..
📖 문제 https://www.acmicpc.net/problem/9017 💡 풀이 방식• 구현필요 자료구조- 등수 저장용 int형 배열 (ranks)- 각 팀별 인원 수 저장용 Map (cntMap)- 가장 큰 숫자의 팀 번호 저장용 int형 변수- 해당 팀의 5번째 선수 저장용 배열 (fifth)- 팀 별 최종 점수 저장용 Map (scoreMap)- 6명 이상인 팀 별로 몇 명 있는지 저장용 Map (tmpMap)- 가장 낮은 점수 저장용 int형 변수 (result)- 5번째 점수 저장용 int형 변수 (fifthScore) . N개의 등수를 입력받는다. - ranks 배열에 저장한다. - 각 팀 별 팀원 수를 cntMap에 저장한다. - 가장 큰 번호의 팀 teamN..
📖 문제 https://www.acmicpc.net/problem/3758 💡 풀이 방식• 정렬. 문제의 조건에 맞게 정렬한다. @Overridepublic int compareTo(Info i) { if (this.score == i.score) { // 총점 높은 순 if (this.cnt == i.cnt) // 총점 같고 제출 횟수 같으면, 마지막 제출 시간 더 빠른 순 return this.time - i.time; return this.cnt - i.cnt; // 총점 같고, 제출 횟수 다르면, 제출 횟수 적은 순순 } return i.score - this.score;} 🔺 코드12345678910..
📖 문제 https://www.acmicpc.net/problem/2531 💡 풀이 방식• 투 포인터1. 입력된 정보를 저장한다. - int[N] sushi : 초밥 종류 저장 배열 - int[d+1] chk : 초밥 각 종류가 몇 개 존재하는지 나타내는 배열 2. 투 포인터를 이용해 먹을 수 있는 최대 가짓수를 구한다. 1) 회전하지 않았을 때 초밥을 먹는다. 2) N-1번 회전하며 탐색을 진행한다. → [규칙] 처음 먹은 초밥은 제거하고, 마지막+1 번째 초밥은 추가한다. 🔺 코드12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152import java..
📖 문제 https://www.acmicpc.net/problem/9205 💡 풀이 방식• 플로이드 와샬필요 자료구조- 위치들 저장용 리스트- 위치들 중 두 지점 간 방문 가능한지 표시하는 2차원형 boolean형 배열 1. 모든 위치들을 입력받아 리스트에 저장한다.2. 모든 위치들 중 2개를 골라 두 위치 간의 맨해튼 거리를 계산한다. (맨해튼 거리가 1000 이하라면 해당 거리로 이동할 수 있다.)3. 지점 A에서 B로 이동 가능하고, B에서 C로 이동 가능하다면 A에서 C로 이동 가능하므로 이동 가능하다는 표시를 한다. (플로이드-와샬) 💥 유의사항플로이드-와샬은 시간 복잡도가 O(N^3)이므로 사용 시 주의가 필요하다. 🔺 코드123456789101112131415161718192..
📖 문제 https://www.acmicpc.net/problem/2138 💡 풀이 방식• 그리디- 스위치의 성격 상(on/off) 매 순간의 선택이 최적의 선택이 될 수 있으므로 그리디 사용 가능. 1. 첫 번째 전구의 스위치를 [켜는 / 끄는] 경우를 모두 고려해야 한다.2. 2~N번째 전구까지 반복하며, i-1번째 인덱스의 현재값 != i-1번째 인덱스의 기댓값이면 스위치를 켠다.3. 1번의 2가지 경우 모두 불가능하다면 -1을 출력하고, 아니라면 2개 중 최솟값을 출력한다. 🔺 코드12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758import j..
📖 문제 https://www.acmicpc.net/problem/20437 💡 풀이 방식• 슬라이딩 윈도우1. 입력받는 문자열 w의 알파벳 갯수를 센다.int[] alpha = new int[26];for(int i = 0 ; i 2. 입력받은 문자열을 돌면서 해당 문자의 갯수가 k개 이하라면 탐색을 종료한다.if(alpha[w.charAt(i) - 'a'] k개 이상이라면, 뒷 문자와 비교하며 같은 문자의 갯수를 센다.if(w.charAt(i) == w.charAt(j)) cnt++; 그리고 같은 문자가 k개가 되는 순간, 문제에서 요구하는 조건만큼의 문자를 포함하는 길이가 되었으므로min, max 값을 갱신한다. 🔺 코드1234567891011121314151617181920..