[체육복]
* 로직
- 1~n명까지 모두 한 벌씩 가지고 있다고 초기화한다
- reserve가 가능한 학생에 대해 한 벌씩 더 추가해준다
- lost인 학생에 대해 한 벌씩 제거해준다
=> 이를 통해 옷이 없는 인원과 여벌이 있는 학생에 대한 리스트를 구할 수 있다 - 옷을 줄 수 있는 학생을 한 명씩 뽑아 lost 리스트에서 -1, +1 범위 내에 존재하는 학생이 존재한다면 제공을 해주고 마킹한다
//체육복
import java.util.Arrays;
import java.util.LinkedList;
public class Problem_GymSuit {
public static void main(String[] args) {
int n = 5;
int[] lost = {2, 4};
int[] reserve = {1,3,5};
int answer = solution(n, lost, reserve);
System.out.println(answer);
}
public static int solution(int n, int[] lost, int[] reserve) {
int answer = 0;
boolean[] checked = new boolean[n+1];
int[] arr = new int[n+1];
LinkedList<Integer> list_reserve = new LinkedList<>();
LinkedList<Integer> list_lost = new LinkedList<>();
Arrays.fill(arr, 1);
for(int reservePerson : reserve){
arr[reservePerson]++;
}
for(int needPerson : lost){
arr[needPerson]--;
}
//여벌을 줄 수 있는 학생과 그렇지 못한 학생 설정
for(int i=1; i<=n; ++i){
if(arr[i] >= 1) {
if(arr[i] == 2) list_reserve.add(i);
answer++;
}
else list_lost.add(i);
}
for(int reservePerson : list_reserve){
for(int needPerson : list_lost){
if(!checked[needPerson]){
if(reservePerson-1 == needPerson || reservePerson+1 == needPerson) {
checked[needPerson] = true;
answer++;
break;
}
}
}
}
return answer;
}
}
[2016년]
* 로직
- 1월 1일이 금요일이기 때문에 요일을 관리하는 배열의 1번째 인덱스가 금요일이 되게 맞춘다
=> ["THU","FRI","SAT","SUN","MON","TUE","WED"] - 입력된 a와 b를 통해 해당 날짜까지의 현재 일수로 변환한다
- 변환된 일수 % 7의 인덱스값을 출력한다
//2016년
public class Problem_2016 {
public static void main(String[] args) {
int a = 5;
int b = 24;
String answer = solution(a, b);
System.out.println(answer);
}
public static String solution(int a, int b) {
String answer;
//1월1일이 금요일이라면 => index 1이 금요일이 되게끔 설정
String[] days = {"THU","FRI","SAT","SUN","MON","TUE","WED"};
//일로 변환해 나머지 연산 실행
int totalDay = 0;
for(int i=1; i<a; i++) { // @1
if(i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12) totalDay += 31;
else if(i == 2) totalDay += 29;
else totalDay += 30;
}
totalDay += b;
answer = days[totalDay % 7];
return answer;
}
}
[가운데 글자 가져오기]
* 로직
- 입력된 s의 개수가 짝수라면
- index = 개수 / 2를 받은 뒤, 이전 글자와 구해진 index의 글자를 출력한다
- 홀수라면
- index = 개수 / 2를 받은 뒤, 해당 글자만 출력한다
//가운데 글자 가져오기
public class Problem_CenterWord {
public static void main(String[] args) {
String s = "abcde";
String answer = solution(s);
System.out.println(answer);
}
public static String solution(String s) {
String answer = "";
int idx=0;
if(s.length() % 2 == 0){
idx = s.length() / 2;
answer = s.substring(idx-1, idx);
answer += s.substring(idx, idx+1);
}
else {
idx = s.length() / 2;
answer = s.substring(idx, idx+1);
}
return answer;
}
}
[같은 숫자는 싫어]
* 로직
- 숫자는 0~9까지이기 때문에 초기 비교할 base 값을 -1로 설정한다
- 입력이 들어온 배열 개수만큼 하나씩 비교한다
- 만약 base 값과 다르다면 list에 담고, base를 갱신한다
//같은 숫자는 싫어
import java.util.ArrayList;
public class Problem_NoSameNumber {
public static void main(String[] args) {
int[] arr = {1,1,3,3,0,1,1};
int[] answer = solution(arr);
for(int ans : answer){
System.out.print(ans + " ");
}
}
public static int[] solution(int[] arr) {
int[] answer;
ArrayList<Integer> results = new ArrayList<>();
int base = -1;
for(int i=0; i<arr.length; ++i){
if(base != arr[i]) {
results.add(arr[i]);
base = arr[i];
}
}
answer = new int[results.size()];
for(int i=0; i<results.size(); ++i){
answer[i] = results.get(i);
}
return answer;
}
}
'Algorithm > Problem_프로그래머스' 카테고리의 다른 글
프로그래머스(멀쩡한 사각형, 쇠막대기) - Java (0) | 2020.04.03 |
---|---|
프로그래머스(프린터, 124 나라의 숫자, 스킬트리) - Java (0) | 2020.04.02 |
알고리즘(자동 완성) (0) | 2020.03.31 |
알고리즘(블록 게임) (0) | 2020.03.30 |
알고리즘(셔틀버스, 무지의 먹방 라이브) (0) | 2020.03.26 |