Problem Solving

문제 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이숫자로 이루어져 있는 문자열에서 s번 인덱스부터 l만큼의 길이로 자른다고 되어있다.l은 8자리까지 가능하다는 것은 1억까지의 수가 나온다는 의미이다.즉, int로 해도 된다는 의미이다. 120개중 k보다 큰 숫자가 몇개가 있는지 알 수 없어 동적배열인 ArrayList를 선택했다. 1. substring으로 문자열을 잘라서 Integer로 파싱해본다.2. k보다 큰 숫자라면 동적배열에 넣는다.3. 동적배열의 크기만큼 int 배열을 만든다.4. int 배열에 값을 넣어준다. 소스코드 import java.util.*;class Solution { ..
문제 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이my_string의 요소의 길이가 100이고, parts의 길이가 100이다.my_string의 요소의 길이를 100번 모두 다 한꺼번에 수행한다고해도, 10000번의 연산이 수행된다.substring 메소드를 통해 시작, 끝 인덱스를 이용해서 문자열을 추출하고, StringBuilder에 이어 붙인다. 소스코드class Solution { public String solution(String[] my_strings, int[][] parts) { StringBuilder sb = new StringBuilder(); ..
문제 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이1. numbers에 있는 요소를 0번째 인덱스부터 탐색하면서, sum이 n보다 큰지 검사하고 아니면, 합을 더한다.2. n보다 크면 for문에서 빠져나와서 합을 리턴한다. 소스코드class Solution { public int solution(int[] numbers, int n) { int sum = 0; for (int num : numbers) { if (sum > n) { break; } ..
문제 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이1. 학생의 대여 상태(있음, 없음, 대여 가능)를 저장할 수 있는 상수와 배열(arr)을 만든다.2. 빌려줄 수 있는 학생을 체크한다.3. 빌려줄 수 있는 학생 + 도난 =>가지고 있는 상태, 여분이 없는데 + 도난 => 도난 상태로 저장한다.4. 학생의 번호를 순회하면서, 앞부터 도난당한 학생이 있으면 준다.앞 학생의 입장에서는 현재 학생이 주지 않으면, 체육복을 받을 수 없어서, 앞 학생에게 체육복을 부여하는 것이 체육복을 부여할 수 있는 최댓값이 된다. 소스코드import java.util.Arrays;class Solution { p..
문제  프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이서버는 시작시간, 끝난시간, 서버의 개수를 기록해야한다.우선순위 큐를 사용해서 끝난 시간에 대해 오름차순 정렬을 해서, 끝나는 시간이 빠른 서버가 우선순위를 높게한다.현재 시간과 끝나는 시간이 같으면, 서버를 빼버리고, 설치한 서버의 수만큼 서버의 개수를 감소시킨다.서버의 필요한 개수와 증설 횟수를 구한다.소스코드 import java.util.*;class Solution { private static class Server { int start; int end; int cnt; ..
문제 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이스택에 인덱스를 저장하는 것을 이용한다.데이터의 수가 100만개이기때문에, O(NlogN)연산으로 끝내야한다.일단 데이터의 수가 4개 이상이 되기 때문에, 0번 인덱스를 넣는다.i번 인덱스 값과 이전 스택들의 값을 비교해서, 스택에서 제일 위에 있는 데이터보다 더 작다면, 뒤 큰수라고 생각하고 다 기록해버린다.뒤 큰수를 넣고, 다음 인덱스를 돌면서 뒤 큰수를 기록한다. 소스코드import java.util.ArrayDeque;class Solution { public int[] solution(int[] numbers) { Arr..
문제 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이x, y가 1에서 100만 사이의 값을 가지므로, 이중 for문과 같은 O(N^2)와 같은 풀이는 절대 안된다.x, y가 좌표라고 치면 최소 이동거리를 계산을 하는 것이 변환하기 위한 최소 연산 횟수라고 생각했다.최소 이동거리를 계산하기 위해서, bfs를 사용해서 현재 위치가 목표 위치가 되었을때, 최소 연산의 횟수를 구한다.  소스코드import java.util.*;class Solution { private static class Point { int pos; int cnt; Point..
문제 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이문자열의 substring 메소드를 사용하면, 해결할 수 있다.18개의 숫자로 된 값을 저장해야하므로, Long값을 사용해야한다.0부터 t의 길이 - p의 길이 까지 p의 길이만큼 부분적으로 잘라서 long 변수로 파싱해서 비교한다. [Java] String substring method계기이 문자를 풀다가, substring의 빅오가 정확히 어떻게 이루어지는지 알지 못했다. 그래서 substring의 빅오가 어떻게 되는지 알아보려고 한다. [Programmers] 크기가 작은 부분문자열 - Java문제 프로gretea5.tistory.com 소스..
문제https://www.acmicpc.net/problem/1092 풀이대표적인 그리디 문제이다.1. 박스와 크레인의 무게를 내림차순으로 정렬해 준다.2. 내림차순으로 정렬했을 때, 첫 번째 인덱스 값이 박스의 무게가 더 나간다면, -1을 출력한다.3. 제일 중요한 부분인데, 크레인의 움직였던 위치를 배열을 만든다. (pos)4. 크레인의 개수만큼 돌면서, 기존 크레인 위치에서 삭제 처리가 된 박스라면 크레인을 이동하고, 삭제 처리가 되지 않은 박스라면 삭제 처리를 하고 바로 빠져나와 크레인의 위치를 유지한다.5. 삭제된 박스의 개수가 m과 같다면 모두 삭제되었으므로 while문을 빠져나온다. 그래서 최종 시간 복잡도는 O(50 * 10000)이다.소스코드import java.io.BufferedRea..
문제https://www.acmicpc.net/problem/7662 풀이TreeMap으로 정수와 정수의 개수를 저장한다.TreeMap에는 firstKey와 lastKey라는 메소드가 존재해, 오름차순으로 정렬하는 TreeMap을 만들었을 경우, key 중에 제일 작은 값과 제일 큰 값은 가져올 수 있다.(firetKey(), lastKey())삭제할 때, 기존의 개수가 1이었다면 제거하고 아니라면 기존 개수 - 1을 넣어준다. (덮어쓰기),비어 있을 경우에는 무시하는 조건도 유의해야 한다. 시간복잡도는 T * log(1000000)이다. 소스코드import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.IOException..
gretea5
'Problem Solving' 카테고리의 글 목록 (10 Page)