๐ ๋ฌธ1) 2016๋ 1์ 1์ผ์ ๊ธ์์ผ์ ๋๋ค. 2016๋ a์ b์ผ์ ๋ฌด์จ ์์ผ์ผ๊น์? ๋ ์ a ,b๋ฅผ ์ ๋ ฅ๋ฐ์ 2016๋ a์ b์ผ์ด ๋ฌด์จ ์์ผ์ธ์ง ๋ฆฌํดํ๋ ํจ์, solution์ ์์ฑํ์ธ์. ์์ผ์ ์ด๋ฆ์ ์ผ์์ผ๋ถํฐ ํ ์์ผ๊น์ง ๊ฐ๊ฐ SUN,MON,TUE,WED,THU,FRI,SAT์ ๋๋ค. ์๋ฅผ ๋ค์ด a=5, b=24๋ผ๋ฉด 5์ 24์ผ์ ํ์์ผ์ด๋ฏ๋ก ๋ฌธ์์ด "TUE"๋ฅผ ๋ฐํํ์ธ์.
์ ํ ์กฐ๊ฑด
์
์ถ๋ ฅ ์
a | b | result |
---|---|---|
5 | 24 | "TUE" |
๋์ ํ์ด
package programmers;
public class Calendar {
public static String solution(int a, int b) {
String[] week = {"FRI","SAT","SUN","MON","TUE","WED","THU"};
int[] monthDays = {31,29,31,30,31,30,31,31,30,31,30,31};
int totalDays = b;
for(int i = 0; i < a - 1; i++) {
totalDays += monthDays[i];
}
return week[(totalDays - 1) % 7];
}
public static void main(String[] args) {
solution(5, 24);
}
}
๋์ ์๊ฐ
2016๋
์ ์ค๋
์ด๋ผ๊ณ ํ์ผ๋ฏ๋ก, 1์๋ถํฐ 12์๊น์ง์ ์ผ์๋ฅผ int[] ๋ฐฐ์ด๋ก ๋ํ๋ด๋ฉด, {31,29,31,30,31,30,31,31,30,31,30,31}
์ด๊ณ ๋ฌธ์ ์์๋ 1์1์ผ์ด ๊ธ์์ผ์ด๋ผ๊ณ ์์์ ์ ์๋ ค์ฃผ์๊ธฐ๋๋ฌธ์, String[] week ๋ฐฐ์ด์ ์ฒซ๋ฒ์งธ index๋ฅผ FRI๋ก ์์ํ์๋ค. 5์24์ผ์ ์๋ก๋ค๋ฉด, 1~4์๊น์ง์ ์ผ ์์ ์ดํฉ๊ณผ, 24์ผ์ ์ผ ์๋ฅผ ์ดํฉ ๊ฒฐ๊ณผ๋ฅผ totalDays
์ ๋ํ๊ณ , index๊ฐ 0๋ฒ ๋ถํฐ ์์ํ๊ธฐ ๋๋ฌธ์ ์ต์ข
์ ์ผ๋ก week[(totalDays - 1) % 7];
์ ๋ฆฌํดํ๋ค.
LocalDate API๋ฅผ ์ฌ์ฉํ ํ์ด
package programmers;
import java.time.LocalDate;
public class Calendar {
public static String solution(int a, int b) {
return LocalDate.of(2016, a, b).getDayOfWeek().toString().substring(0,3);
}
public static void main(String[] args) {
solution(5, 24);
}
}
LocalDate.of(2016,a,b)
: 2016๋
a์ b์ผ์ ๋ ์ง๋ฅผ ๋ํ๋ด๋ LocalDate
๊ฐ์ฒด๋ฅผ ์์ฑ
.getDayOfWeek()
: LocalDate ๊ฐ์ฒด์์ ์์ผ์ ๊ฐ์ ธ์ LocalDate๊ฐ ๋ฌด์จ ์์ผ์ธ์ง ๋ํ๋ด๋ DayOfWeek ์ด๊ฑฐํ์ ๋ฐํ(์ด๊ฑฐํ์ MONDAY, TUESDAY, WEDNESDAY ...)
.substring(0,3)
: ๋ฌธ์์ด์์ ์์ ์ธ ๋ฌธ์๋ฅผ ์ถ์ถ, ์์ผ์ ํํํ๋ ๋ฌธ์์ด์์ ์์ ์ธ ๋ฌธ์๋ง์ ๋ฐํํ๋ฏ๋ก, MONDAY
- > MON
, TUESDAY
-> TUE
๋ก ๋ณํํ๋ค.
๐ ๋ฌธ2) ์ํฌ์๋ ์ํ์ ํฌ๊ธฐํ ์ฌ๋์ ์ค๋ง์ ๋๋ค. ์ํฌ์ ์ผ์ธ๋ฐฉ์ ๋ชจ์๊ณ ์ฌ์ ์ํ ๋ฌธ์ ๋ฅผ ์ ๋ถ ์ฐ์ผ๋ ค ํฉ๋๋ค. ์ํฌ์๋ 1๋ฒ ๋ฌธ์ ๋ถํฐ ๋ง์ง๋ง ๋ฌธ์ ๊น์ง ๋ค์๊ณผ ๊ฐ์ด ์ฐ์ต๋๋ค.
1๋ฒ ์ํฌ์๊ฐ ์ฐ๋ ๋ฐฉ์: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
2๋ฒ ์ํฌ์๊ฐ ์ฐ๋ ๋ฐฉ์: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
3๋ฒ ์ํฌ์๊ฐ ์ฐ๋ ๋ฐฉ์: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...
1๋ฒ ๋ฌธ์ ๋ถํฐ ๋ง์ง๋ง ๋ฌธ์ ๊น์ง์ ์ ๋ต์ด ์์๋๋ก ๋ค์ ๋ฐฐ์ด answers๊ฐ ์ฃผ์ด์ก์ ๋, ๊ฐ์ฅ ๋ง์ ๋ฌธ์ ๋ฅผ ๋งํ ์ฌ๋์ด ๋๊ตฌ์ธ์ง ๋ฐฐ์ด์ ๋ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ ์กฐ๊ฑด
์
์ถ๋ ฅ ์
answers | return |
---|---|
[1,2,3,4,5] | [1] |
[1,3,2,4,2] | [1,2,3] |
์
์ถ๋ ฅ ์ ์ค๋ช
์
์ถ๋ ฅ ์ #1
๋์ ํ์ด
package programmers;
import java.util.ArrayList;
import java.util.Collections;
public class MockExam {
public static int[] solution(int[] answers) {
int[][] patterns = {
{1, 2, 3, 4, 5},
{2, 1, 2, 3, 2, 4, 2, 5},
{3, 3, 1, 1, 2, 2, 4, 4, 5, 5}
};
int[] scores = new int[3];
for(int i = 0; i < answers.length; i++) {
for(int j = 0; j < 3; j++) {
if(patterns[j][i % patterns[j].length] == answers[i]) {
scores[j]++;
}
}
}
int maxScore = Math.max(scores[0], Math.max(scores[1], scores[2]));
ArrayList<Integer> winners = new ArrayList<>();
for(int i = 0; i < 3; i++) {
if(scores[i] == maxScore) {
winners.add(i + 1);
}
}
Collections.sort(winners);
int[] answer = new int[winners.size()];
int cnt = 0;
for(Integer a : winners) {
answer[cnt++] = a;
}
return answer;
}
public static void main(String[] args) {
solution(new int[] {1,2,3,4,5});
}
}
๋์ ์๊ฐ
int[][] patterns = {
{1, 2, 3, 4, 5},
{2, 1, 2, 3, 2, 4, 2, 5},
{3, 3, 1, 1, 2, 2, 4, 4, 5, 5}
};
์ธ ๋ช ์ ์ํฌ์๊ฐ ๊ฐ๊ฐ ๋ฐ๋ณตํ๋ ํจํด์ 2์ฐจ์ ๋ฐฐ์ด๋ก ์ ์ธ
int[] scores = new int[3];
์ธ ๋ช ์ ์ํฌ์๊ฐ ๊ฐ๊ฐ์ด ๋งํ ๋ฌธ์ ์๋ฅผ ์ ์ฅํ ์ ์ ๋ฐฐ์ด์ ์ ์ธ
for (int i = 0; i < answers.length; i++) {
for (int j = 0; j < 3; j++) {
if (patterns[j][i % patterns[j].length] == answers[i]) {
scores[j]++;
}
}
}
์ค์ฒฉ ๋ฐ๋ณต๋ฌธ์ ์ด์ฉํ์ฌ, ๊ฐ ์ํฌ์์ ๋ต์ ํจํด์ด ์ ๋ต๊ณผ ์ผ์นํ๋์ง ํ์ธํ๊ณ , ์ผ์นํ๋ฉด ํด๋น ์ํฌ์์ ์ ์๋ฅผ ์ฆ๊ฐ์ํด
์๋ฅผ๋ค์ด, ๋ ๋ฒ์จฐ ์ํฌ์์ ํจ๋ก์ {2,1,2,3,2,4,2,5}
๋ก ๊ธธ์ด๊ฐ 8์ด๋ฉฐ, i % patterns[1].length
๋ฅผ ์ํํ๋ฉด, i
๋ฅผ 8๋ก ๋๋ ๋๋จธ์ง๊ฐ ๋ฐํ๋๋ฏ๋ก, ์ด ๊ฐ์ 0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7...
์์๋ก ๋ณํจ
int maxScore = Math.max(scores[0], Math.max(scores[1], scores[2]));
์ธ ๋ช ์ ์ํฌ์ ์ค ๊ฐ์ฅ ๋์ ์ ์๋ฅผ ์ฐพ์
ArrayList<Integer> winners = new ArrayList<>();
for (int i = 0; i < 3; i++) {
if (scores[i] == maxScore) {
winners.add(i + 1);
}
}
๊ฐ์ฅ ๋์ ์ ์๋ฅผ ์ป์ ์ํฌ์์ ๋ฒํธ๋ฅผ ArraysList<Integer>
์ ์ ์ฅ, ์ฌ๊ธฐ์ i + 1
์ ์ํฌ์์ ๋ฒํธ๋ฅผ ํ๋๋ (index๋ 0๋ถํฐ ์์ํ๊ณ ์ํฌ์ ๋ฒํธ๋ 1๋ถํฐ ์์ํ๊ธฐ๋๋ฌธ์)
Collections.sort(winners);
์ ์ฅ๋ ์ํฌ์๋ค์ ๋ฒํธ๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ
int[] answer = new int[winners.size()];
int cnt = 0;
for(Integer a : winners) {
answer[cnt++] = a;
}
intํ ๋ฐฐ์ด answer์ winners
์ ๋ชจ๋ ์์๋ฅผ ์ ์ฅ
๐ ๋ฌธ3) "๋ช ์์ ์ ๋น"์ด๋ผ๋ TV ํ๋ก๊ทธ๋จ์์๋ ๋งค์ผ 1๋ช ์ ๊ฐ์๊ฐ ๋ ธ๋๋ฅผ ๋ถ๋ฅด๊ณ , ์์ฒญ์๋ค์ ๋ฌธ์ ํฌํ์๋ก ๊ฐ์์๊ฒ ์ ์๋ฅผ ๋ถ์ฌํฉ๋๋ค. ๋งค์ผ ์ถ์ฐํ ๊ฐ์์ ์ ์๊ฐ ์ง๊ธ๊น์ง ์ถ์ฐ ๊ฐ์๋ค์ ์ ์ ์ค ์์ k๋ฒ์งธ ์ด๋ด์ด๋ฉด ํด๋น ๊ฐ์์ ์ ์๋ฅผ ๋ช ์์ ์ ๋น์ด๋ผ๋ ๋ชฉ๋ก์ ์ฌ๋ ค ๊ธฐ๋ ํฉ๋๋ค. ์ฆ ํ๋ก๊ทธ๋จ ์์ ์ดํ ์ด๊ธฐ์ k์ผ๊น์ง๋ ๋ชจ๋ ์ถ์ฐ ๊ฐ์์ ์ ์๊ฐ ๋ช ์์ ์ ๋น์ ์ค๋ฅด๊ฒ ๋ฉ๋๋ค. k์ผ ๋ค์๋ถํฐ๋ ์ถ์ฐ ๊ฐ์์ ์ ์๊ฐ ๊ธฐ์กด์ ๋ช ์์ ์ ๋น ๋ชฉ๋ก์ k๋ฒ์งธ ์์์ ๊ฐ์ ์ ์๋ณด๋ค ๋ ๋์ผ๋ฉด, ์ถ์ฐ ๊ฐ์์ ์ ์๊ฐ ๋ช ์์ ์ ๋น์ ์ค๋ฅด๊ฒ ๋๊ณ ๊ธฐ์กด์ k๋ฒ์งธ ์์์ ์ ์๋ ๋ช ์์ ์ ๋น์์ ๋ด๋ ค์ค๊ฒ ๋ฉ๋๋ค.
์ด ํ๋ก๊ทธ๋จ์์๋ ๋งค์ผ "๋ช ์์ ์ ๋น"์ ์ตํ์ ์ ์๋ฅผ ๋ฐํํฉ๋๋ค. ์๋ฅผ ๋ค์ด, k = 3์ด๊ณ , 7์ผ ๋์ ์งํ๋ ๊ฐ์์ ์ ์๊ฐ [10, 100, 20, 150, 1, 100, 200]์ด๋ผ๋ฉด, ๋ช ์์ ์ ๋น์์ ๋ฐํ๋ ์ ์๋ ์๋์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด [10, 10, 10, 20, 20, 100, 100]์ ๋๋ค.
๋ช ์์ ์ ๋น ๋ชฉ๋ก์ ์ ์์ ๊ฐ์ k, 1์ผ๋ถํฐ ๋ง์ง๋ง ๋ ๊น์ง ์ถ์ฐํ ๊ฐ์๋ค์ ์ ์์ธ score๊ฐ ์ฃผ์ด์ก์ ๋, ๋งค์ผ ๋ฐํ๋ ๋ช ์์ ์ ๋น์ ์ตํ์ ์ ์๋ฅผ returnํ๋ solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
์
์ถ๋ ฅ ์
k | score | result |
---|---|---|
3 | [10, 100, 20, 150, 1, 100, 200] | [10, 10, 10, 20, 20, 100, 100] |
4 | [0, 300, 40, 300, 20, 70, 150, 50, 500, 1000] | [0, 0, 0, 0, 20, 40, 70, 70, 150, 300] |
๋์ ํ์ด
package programmers;
import java.util.ArrayList;
import java.util.Collections;
public class HallOfFame {
public static int[] solution(int k, int[] score) {
int[] answer = new int[score.length];
ArrayList<Integer> temp = new ArrayList<>();
int cnt = 0;
for(int i = 1; i <= score.length; i++) {
for(int j = cnt; j < i; j++) {
cnt++;
temp.add(score[i-1]);
if(temp.size() > k) {
int minIndex = temp.indexOf(Collections.min(temp));
temp.remove(minIndex);
}
}
answer[i-1] = Collections.min(temp);
}
return answer;
}
public static void main(String[] args) {
solution(4, new int[] {0,300,40,300,20,70,150,50,500,1000});
}
}
๋์ ์๊ฐ
๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ ๊ฐ๋ณ์ ์ผ๋ก ๋ณํ๊ธฐ๋๋ฌธ์ intํ ๋ฐฐ์ด๋ก ์ก์๊ฒ์ด ์๋๋ผ, List๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ณ์ ์ผ๋ก ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ํ ๋นํ ์ ์๋๋กํ์๋ค.
List์ ํฌ๊ธฐ๊ฐ k
๋ณด๋ค ํฌ๋ฉด, temp List์์ ์ต์๊ฐ์ ํด๋นํ๋ index๋ฅผ ์ฐพ์, temp.remove()
๋ฉ์๋๋ฅผ ํ์ฉํ์ฌ ์ต์๊ฐ์ ์ ๊ฑฐํ๊ณ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ k๋ก ๋ง์ถ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์๋ค. ๊ทธ๋ฆฌ๊ณ , for๋ฌธ์ ์ํํ๋ฉฐ, ํด๋น temp์ ๋ ์ต์๊ฐ์ ์ฐพ์ int[] answer
์ ์ถ๊ฐํ์ฌ ๋ฆฌํดํ์๋ค.
PriorityQueue๋ฅผ ์ฌ์ฉํ ๋ฐฉ๋ฒ
package programmers;
import java.util.Arrays;
import java.util.PriorityQueue;
public class HallOfFame {
public static int[] solution(int k, int[] score) {
int[] answer = new int[score.length];
PriorityQueue<Integer>pq = new PriorityQueue<>();
for(int i = 0; i < score.length; i++) {
pq.offer(score[i]);
if(pq.size() > k) {
pq.poll();
}
answer[i] = pq.peek();
}
System.out.println(Arrays.toString(answer));
return answer;
}
public static void main(String[] args) {
solution(4, new int[] {0,300,40,300,20,70,150,50,500,1000});
}
}
๊ฒฐ๊ณผ
๐ ๋ฌธ4) ๋น์ ์ ํฐ์ผ๋ชฌ์ ์ก๊ธฐ ์ํ ์ค๋ ์ฌํ ๋์, ํ ๋ฐ์ฌ๋์ ์ฐ๊ตฌ์ค์ ๋์ฐฉํ์ต๋๋ค. ํ ๋ฐ์ฌ๋์ ๋น์ ์๊ฒ ์์ ์ ์ฐ๊ตฌ์ค์ ์๋ ์ด N ๋ง๋ฆฌ์ ํฐ์ผ๋ชฌ ์ค์์ N/2๋ง๋ฆฌ๋ฅผ ๊ฐ์ ธ๊ฐ๋ ์ข๋ค๊ณ ํ์ต๋๋ค.
ํ ๋ฐ์ฌ๋ ์ฐ๊ตฌ์ค์ ํฐ์ผ๋ชฌ์ ์ข
๋ฅ์ ๋ฐ๋ผ ๋ฒํธ๋ฅผ ๋ถ์ฌ ๊ตฌ๋ถํฉ๋๋ค. ๋ฐ๋ผ์ ๊ฐ์ ์ข
๋ฅ์ ํฐ์ผ๋ชฌ์ ๊ฐ์ ๋ฒํธ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ฐ๊ตฌ์ค์ ์ด 4๋ง๋ฆฌ์ ํฐ์ผ๋ชฌ์ด ์๊ณ , ๊ฐ ํฐ์ผ๋ชฌ์ ์ข
๋ฅ ๋ฒํธ๊ฐ [3๋ฒ, 1๋ฒ, 2๋ฒ, 3๋ฒ]์ด๋ผ๋ฉด ์ด๋ 3๋ฒ ํฐ์ผ๋ชฌ ๋ ๋ง๋ฆฌ, 1๋ฒ ํฐ์ผ๋ชฌ ํ ๋ง๋ฆฌ, 2๋ฒ ํฐ์ผ๋ชฌ ํ ๋ง๋ฆฌ๊ฐ ์์์ ๋ํ๋
๋๋ค. ์ด๋, 4๋ง๋ฆฌ์ ํฐ์ผ๋ชฌ ์ค 2๋ง๋ฆฌ๋ฅผ ๊ณ ๋ฅด๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ด 6๊ฐ์ง๊ฐ ์์ต๋๋ค.
์ด๋, ์ฒซ ๋ฒ์งธ(3๋ฒ) ํฐ์ผ๋ชฌ๊ณผ ๋ค ๋ฒ์งธ(3๋ฒ) ํฐ์ผ๋ชฌ์ ์ ํํ๋ ๋ฐฉ๋ฒ์ ํ ์ข
๋ฅ(3๋ฒ ํฐ์ผ๋ชฌ ๋ ๋ง๋ฆฌ)์ ํฐ์ผ๋ชฌ๋ง ๊ฐ์ง ์ ์์ง๋ง, ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ค์ ๋ชจ๋ ๋ ์ข
๋ฅ์ ํฐ์ผ๋ชฌ์ ๊ฐ์ง ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ ์์์์ ๊ฐ์ง ์ ์๋ ํฐ์ผ๋ชฌ ์ข
๋ฅ ์์ ์ต๋๊ฐ์ 2๊ฐ ๋ฉ๋๋ค.
๋น์ ์ ์ต๋ํ ๋ค์ํ ์ข
๋ฅ์ ํฐ์ผ๋ชฌ์ ๊ฐ์ง๊ธธ ์ํ๊ธฐ ๋๋ฌธ์, ์ต๋ํ ๋ง์ ์ข
๋ฅ์ ํฐ์ผ๋ชฌ์ ํฌํจํด์ N/2๋ง๋ฆฌ๋ฅผ ์ ํํ๋ ค ํฉ๋๋ค. N๋ง๋ฆฌ ํฐ์ผ๋ชฌ์ ์ข
๋ฅ ๋ฒํธ๊ฐ ๋ด๊ธด ๋ฐฐ์ด nums๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, N/2๋ง๋ฆฌ์ ํฐ์ผ๋ชฌ์ ์ ํํ๋ ๋ฐฉ๋ฒ ์ค, ๊ฐ์ฅ ๋ง์ ์ข
๋ฅ์ ํฐ์ผ๋ชฌ์ ์ ํํ๋ ๋ฐฉ๋ฒ์ ์ฐพ์, ๊ทธ๋์ ํฐ์ผ๋ชฌ ์ข
๋ฅ ๋ฒํธ์ ๊ฐ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
์
์ถ๋ ฅ ์
nums | result |
---|---|
[3,1,2,3] | 2 |
[3,3,3,2,2,4] | 3 |
[3,3,3,2,2,2] | 2 |
์
์ถ๋ ฅ ์ ์ค๋ช
์
์ถ๋ ฅ ์ #2
6๋ง๋ฆฌ์ ํฐ์ผ๋ชฌ์ด ์์ผ๋ฏ๋ก, 3๋ง๋ฆฌ์ ํฐ์ผ๋ชฌ์ ๊ณจ๋ผ์ผ ํฉ๋๋ค.
๊ฐ์ฅ ๋ง์ ์ข
๋ฅ์ ํฐ์ผ๋ชฌ์ ๊ณ ๋ฅด๊ธฐ ์ํด์๋ 3๋ฒ ํฐ์ผ๋ชฌ ํ ๋ง๋ฆฌ, 2๋ฒ ํฐ์ผ๋ชฌ ํ ๋ง๋ฆฌ, 4๋ฒ ํฐ์ผ๋ชฌ ํ ๋ง๋ฆฌ๋ฅผ ๊ณ ๋ฅด๋ฉด ๋๋ฉฐ, ๋ฐ๋ผ์ 3์ return ํฉ๋๋ค.
์
์ถ๋ ฅ ์ #3
6๋ง๋ฆฌ์ ํฐ์ผ๋ชฌ์ด ์์ผ๋ฏ๋ก, 3๋ง๋ฆฌ์ ํฐ์ผ๋ชฌ์ ๊ณจ๋ผ์ผ ํฉ๋๋ค.
๊ฐ์ฅ ๋ง์ ์ข
๋ฅ์ ํฐ์ผ๋ชฌ์ ๊ณ ๋ฅด๊ธฐ ์ํด์๋ 3๋ฒ ํฐ์ผ๋ชฌ ํ ๋ง๋ฆฌ์ 2๋ฒ ํฐ์ผ๋ชฌ ๋ ๋ง๋ฆฌ๋ฅผ ๊ณ ๋ฅด๊ฑฐ๋, ํน์ 3๋ฒ ํฐ์ผ๋ชฌ ๋ ๋ง๋ฆฌ์ 2๋ฒ ํฐ์ผ๋ชฌ ํ ๋ง๋ฆฌ๋ฅผ ๊ณ ๋ฅด๋ฉด ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ต๋ ๊ณ ๋ฅผ ์ ์๋ ํฐ์ผ๋ชฌ ์ข
๋ฅ์ ์๋ 2์
๋๋ค.
๋์ ํ์ด
package programmers;
import java.util.HashSet;
import java.util.Set;
public class Pokemon {
public static int solution(int[] nums) {
Set<Integer> phonekemon = new HashSet<>();
for(int i = 0; i< nums.length; i++) {
phonekemon.add(nums[i]);
}
int answer = (nums.length / 2) ;
if(answer > phonekemon.size()) {
answer = phonekemon.size();
}
System.out.println(answer);
return answer;
}
public static void main(String[] args) {
solution(new int[] {3,3,3,2,2,2});
}
}
๋์ ์๊ฐ
ํ๋ฐ์ฌ์๊ฒ ๋ฐ์ ์ ์๋ ํฐ์ผ๋ชฌ์ ๊ฐ์๋ int[] ๋ฐฐ์ด์ nums
์ ํฌ๊ธฐ์ 1/2
์ด๊ณ , hashSet
๋ฅผ ์ฌ์ฉํด์ ๋งค๊ฐ๋ณ์ nums์ ๊ฐ๋ค์ ๋ฃ๊ณ , ์ค๋ณต์ ์ ๊ฑฐํ๋ค. ๊ทธ๋ฆฌ๊ณ answer
์ ๊ธธ์ด์ hashSet์ ํฌ๊ธฐ๋ฅผ ๋น๊ตํ์ฌ ์์ ๊ฐ์ answer์ ๊ฐ์ผ๋ก ๋ฐ๊ฟ์ค๋ค. ์ฆ, HashSet
์ ์ฌ์ฉํ์ฌ ์ค๋ณต๋ ํฐ์ผ๋ชฌ ์ข
๋ฅ๋ฅผ ์ ๊ฑฐํ๊ณ , ์ ํํ ์ ์๋ ํฐ์ผ๋ชฌ ์ข
๋ฅ์ ์ต๋ ๊ฐ์๋ฅผ ๊ตฌํ๋ ๊ฒ์ด๋ค.
๐ ๋ฌธ5) ๊ณผ์ผ ์ฅ์๊ฐ ์ฌ๊ณผ ์์๋ฅผ ํฌ์ฅํ๊ณ ์์ต๋๋ค. ์ฌ๊ณผ๋ ์ํ์ ๋ฐ๋ผ 1์ ๋ถํฐ k์ ๊น์ง์ ์ ์๋ก ๋ถ๋ฅํ๋ฉฐ, k์ ์ด ์ต์ํ์ ์ฌ๊ณผ์ด๊ณ 1์ ์ด ์ตํํ์ ์ฌ๊ณผ์ ๋๋ค. ์ฌ๊ณผ ํ ์์์ ๊ฐ๊ฒฉ์ ๋ค์๊ณผ ๊ฐ์ด ๊ฒฐ์ ๋ฉ๋๋ค.
๊ณผ์ผ ์ฅ์๊ฐ ๊ฐ๋ฅํ ๋ง์ ์ฌ๊ณผ๋ฅผ ํ์์ ๋, ์ป์ ์ ์๋ ์ต๋ ์ด์ต์ ๊ณ์ฐํ๊ณ ์ ํฉ๋๋ค.(์ฌ๊ณผ๋ ์์ ๋จ์๋ก๋ง ํ๋งคํ๋ฉฐ, ๋จ๋ ์ฌ๊ณผ๋ ๋ฒ๋ฆฝ๋๋ค)
์๋ฅผ ๋ค์ด, k = 3, m = 4, ์ฌ๊ณผ 7๊ฐ์ ์ ์๊ฐ [1, 2, 3, 1, 2, 3, 1]์ด๋ผ๋ฉด, ๋ค์๊ณผ ๊ฐ์ด [2, 3, 2, 3]์ผ๋ก ๊ตฌ์ฑ๋ ์ฌ๊ณผ ์์ 1๊ฐ๋ฅผ ๋ง๋ค์ด ํ๋งคํ์ฌ ์ต๋ ์ด์ต์ ์ป์ ์ ์์ต๋๋ค.
์ฌ๊ณผ์ ์ต๋ ์ ์ k, ํ ์์์ ๋ค์ด๊ฐ๋ ์ฌ๊ณผ์ ์ m, ์ฌ๊ณผ๋ค์ ์ ์ score๊ฐ ์ฃผ์ด์ก์ ๋, ๊ณผ์ผ ์ฅ์๊ฐ ์ป์ ์ ์๋ ์ต๋ ์ด์ต์ returnํ๋ solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
์
์ถ๋ ฅ ์
k | m | score |
---|---|---|
3 | 4 | [1,2,3,1,2,3,1] |
4 | 3 | [4,1,2,2,4,4,4,4,1,2,4,2] |
์
์ถ๋ ฅ ์ ์ค๋ช
์
์ถ๋ ฅ ์ #2
์ฌ๊ณผ ์์ | ๊ฐ๊ฒฉ |
---|---|
[1, 1, 2] | 1 x 3 = 3 |
[2, 2, 2] | 2 x 3 = 6 |
[4,4,4] | 4 x 3 = 12 |
[4,4,4] | 4 x 3 = 12 |
๋ฐ๋ผ์ (1 x 3 x 1) + (2 x 3 x 1) + (4 x 3 x 2) = 33์ returnํฉ๋๋ค.
๋์ ํ์ด
package programmers;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class FruitSeller {
public static int solution(int k, int m, int[] score) {
int answer = 0;
ArrayList<Integer> list = new ArrayList<>();
for(int a : score) {
list.add(a);
}
Collections.sort(list, Comparator.reverseOrder());
int[] box = new int[m];
int boxIndex = 0;
for(int i = 0; i < list.size(); i++) {
box[boxIndex++] = list.get(i);
if(boxIndex == m) {
int min = box[0];
for(int j = 1; j < m; j++) {
if(box[j] < min) {
min = box[j];
}
}
answer += min * m;
boxIndex = 0;
}
}
System.out.println(answer);
return answer;
}
public static void main(String[] args) {
solution(3, 4, new int[] {1, 2, 3, 1, 2, 3, 1});
}
}
๋์ ์๊ฐ
๊ณผ์ผ ์ ์๋ฅผ ์ ์ฅํ๋ ArrayList<Integer>
ํ์
์ผ๋ก ์ ์ธํ์ฌ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋ int[] score ๋ฅผ ํฅ์๋ for๋ฌธ์ผ๋ก ๋ฐฐ์ด์ ์์๋ฅผ list
์ ์ถ๊ฐํ๋ค.
Collections.sort(list, Comparator.reverseOrder())
๋ฉ์๋๋ฅผ ํ์ฉํ์ฌ list
๋ฅผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ค.
int[] box = new int[m];
int boxIndex = 0;
for(int i = 0; i < list.size(); i++) {
box[boxIndex++] = list.get(i);
if(boxIndex == m) {
int min = box[0];
for(int j = 1; j < m; j++) {
if(box[j] < min) {
min = box[j];
}
}
answer += min * m;
boxIndex = 0;
}
}
๋ง์ฝ, box
๋ฐฐ์ด์ด ์ ์ฒด์ ์ผ๋ก ์ฑ์์ง๋ฉด, ๋ฐฐ์ด์์ ๊ฐ์ฅ ์์ ๊ฐ์ ์ฐพ๊ณ , ์ด ๋ถ๋ถ์ m
์ ๊ณฑํ์ฌ answer
์ ์ถ๊ฐ
๊ฐ๋ฐ์๋ก์ ์ฑ์ฅํ๋ ๋ฐ ํฐ ๋์์ด ๋ ๊ธ์ด์์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค.