๐ ๋ฌธ1) H-Index๋ ๊ณผํ์์ ์์ฐ์ฑ๊ณผ ์ํฅ๋ ฅ์ ๋ํ๋ด๋ ์งํ์ ๋๋ค. ์ด๋ ๊ณผํ์์ H-Index๋ฅผ ๋ํ๋ด๋ ๊ฐ์ธ h๋ฅผ ๊ตฌํ๋ ค๊ณ ํฉ๋๋ค. ์ํค๋ฐฑ๊ณผ1์ ๋ฐ๋ฅด๋ฉด, H-Index๋ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํฉ๋๋ค.
์ด๋ค ๊ณผํ์๊ฐ ๋ฐํํ ๋ ผ๋ฌธ nํธ ์ค, h๋ฒ ์ด์ ์ธ์ฉ๋ ๋ ผ๋ฌธ์ด hํธ ์ด์์ด๊ณ ๋๋จธ์ง ๋ ผ๋ฌธ์ด h๋ฒ ์ดํ ์ธ์ฉ๋์๋ค๋ฉด h์ ์ต๋๊ฐ์ด ์ด ๊ณผํ์์ H-Index์ ๋๋ค.
์ด๋ค ๊ณผํ์๊ฐ ๋ฐํํ ๋ ผ๋ฌธ์ ์ธ์ฉ ํ์๋ฅผ ๋ด์ ๋ฐฐ์ด citations๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์ด ๊ณผํ์์ H-Index๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
์
์ถ๋ ฅ ์
citations | return |
---|---|
[3,0,6,1,5] | 3 |
์
์ถ๋ ฅ ์ ์ค๋ช
์ด ๊ณผํ์๊ฐ ๋ฐํํ ๋ ผ๋ฌธ์ ์๋ 5ํธ์ด๊ณ , ๊ทธ์ค 3ํธ์ ๋ ผ๋ฌธ์ 3ํ ์ด์ ์ธ์ฉ๋์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋จธ์ง 2ํธ์ ๋ ผ๋ฌธ์ 3ํ ์ดํ ์ธ์ฉ๋์๊ธฐ ๋๋ฌธ์ ์ด ๊ณผํ์์ H-Index๋ 3์ ๋๋ค.
๋์ ํ์ด
package programmers;
import java.util.Arrays;
public class Citations {
public static int solution(int[] citations) {
Arrays.sort(citations);
int length = citations.length;
for(int i = 0; i < length; i++) {
int h = length - i;
if(citations[i] >= h) {
return h;
}
}
return 0;
}
public static void main(String[] args) {
solution(new int[] {3,0,6,1,5});
}
}
๋์ ์๊ฐ
๋จผ์ , ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง citations
์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ์ ํ๋ค.
๋ฌธ์ ์์ ๋งํ๋ h-index
๋ n
๊ฐ์ ๋
ผ๋ฌธ ์ค h
๋ฒ ์ด์ ์ธ์ฉ๋ ๋
ผ๋ฌธ์ด h
ํธ ์ด์์ด๊ณ ๋๋จธ์ง ๋จ์ ๋
ผ๋ฌธ์ด h
๋ฒ ์ดํ ์ธ์ฉ๋์๋ค๋ฉด h
์ ์ต๋๊ฐ์ด h-index
์ด๋ค.
for(int i = 0; i < length; i++) {
int h = length - i;
if(citations[i] >= h) {
return h;
}
}
i = 0, citations[i] = 0, h = 5
i = 1, citations[i] = 1, h = 4
i = 2, citations[i] = 3, h = 3
i = 3, citations[i] = 5, h = 2
i = 4, citations[i] = 6, h = 1
int h = length - i
: ์ฌ๊ธฐ์ h
๋ ํ์ฌ ์ธ์ฉ ํ์๊ฐ h
์ด์์ธ ๋
ผ๋ฌธ์ ์ต์ ๊ฐฏ์๋ฅผ ๋ํ๋ธ๋ค. ์๋ํ๋ฉด citations
๋ฐฐ์ด์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์๊ธฐ ๋๋ฌธ์, i
๋ฒ์งธ ๋
ผ๋ฌธ์ ์ธ์ฉ ํ์๊ฐ h
์ด์์ด๋ผ๋ฉด,i
์ดํ์ ๋ชจ๋ ๋
ผ๋ฌธ๋ค๋ h
์ด์์ ์ธ์ฉ ํ์๋ฅผ ๊ฐ์ง๊ฒ ๋จ
if(citations[i] >= h
์ด ์กฐ๊ฑด์ ํ์ฌ ํ์ธํ๋ ๋
ผ๋ฌธ์ ์ธ์ฉ ํ์๊ฐ h
์ด์์ธ์ง ํ์ธํ๊ณ , ๋ง์ฝ h
์ด์์ด๋ผ๋ฉด h
๋ฒ ์ด์ ์ธ์ฉ๋ ๋
ผ๋ฌธ์ด h
ํธ ์ด์์ด ๋๋ฏ๋ก, ํ์ฌ์ h
๋ H-Index
๊ฐ ๋๋ค.
๐ ๋ฌธ2) XYZ ๋งํธ๋ ์ผ์ ํ ๊ธ์ก์ ์ง๋ถํ๋ฉด 10์ผ ๋์ ํ์ ์๊ฒฉ์ ๋ถ์ฌํฉ๋๋ค. XYZ ๋งํธ์์๋ ํ์์ ๋์์ผ๋ก ๋งค์ผ ํ ๊ฐ์ง ์ ํ์ ํ ์ธํ๋ ํ์ฌ๋ฅผ ํฉ๋๋ค. ํ ์ธํ๋ ์ ํ์ ํ๋ฃจ์ ํ๋์ฉ๋ง ๊ตฌ๋งคํ ์ ์์ต๋๋ค. ์๋ฐํ ์ ํ์ด๋ ์์ ์ด ์ํ๋ ์ ํ๊ณผ ์๋์ด ํ ์ธํ๋ ๋ ์ง์ 10์ผ ์ฐ์์ผ๋ก ์ผ์นํ ๊ฒฝ์ฐ์ ๋ง์ถฐ์ ํ์๊ฐ์ ์ ํ๋ ค ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์ ํ์ด๊ฐ ์ํ๋ ์ ํ์ด ๋ฐ๋๋ 3๊ฐ, ์ฌ๊ณผ 2๊ฐ, ์ 2๊ฐ, ๋ผ์ง๊ณ ๊ธฐ 2๊ฐ, ๋๋น 1๊ฐ์ด๋ฉฐ, XYZ ๋งํธ์์ 15์ผ๊ฐ ํ์์ ๋์์ผ๋ก ํ ์ธํ๋ ์ ํ์ด ๋ ์ง ์์๋๋ก ์นํจ, ์ฌ๊ณผ, ์ฌ๊ณผ, ๋ฐ๋๋, ์, ์ฌ๊ณผ, ๋ผ์ง๊ณ ๊ธฐ, ๋ฐ๋๋, ๋ผ์ง๊ณ ๊ธฐ, ์, ๋๋น, ๋ฐ๋๋, ์ฌ๊ณผ, ๋ฐ๋๋์ธ ๊ฒฝ์ฐ์ ๋ํด ์์๋ด ์๋ค. ์ฒซ์งธ ๋ ๋ถํฐ ์ดํ ๊ฐ์๋ ๋๋น๊ฐ ํ ์ธํ์ง ์๊ธฐ ๋๋ฌธ์ ์ฒซ์งธ ๋ ์๋ ํ์๊ฐ์ ์ ํ์ง ์์ต๋๋ค. ๋์งธ ๋ ๋ถํฐ ์ดํ ๊ฐ์๋ ๋ฐ๋๋๋ฅผ ์ํ๋ ๋งํผ ํ ์ธ๊ตฌ๋งคํ ์ ์๊ธฐ ๋๋ฌธ์ ๋์งธ ๋ ์๋ ํ์๊ฐ์ ์ ํ์ง ์์ต๋๋ค. ์ ์งธ ๋ , ๋ท์งธ ๋ , ๋ค์ฏ์งธ ๋ ๋ถํฐ ๊ฐ๊ฐ ์ดํ์ ์ํ๋ ์ ํ๊ณผ ์๋์ด ์ผ์นํ๊ธฐ ๋๋ฌธ์ ์ ์ค ํ๋ฃจ์ ํ์๊ฐ์ ์ ํ๋ ค ํฉ๋๋ค.
์ ํ์ด๊ฐ ์ํ๋ ์ ํ์ ๋ํ๋ด๋ ๋ฌธ์์ด ๋ฐฐ์ด want์ ์ ํ์ด๊ฐ ์ํ๋ ์ ํ์ ์๋์ ๋ํ๋ด๋ ์ ์ ๋ฐฐ์ด number, XYZ ๋งํธ์์ ํ ์ธํ๋ ์ ํ์ ๋ํ๋ด๋ ๋ฌธ์์ด ๋ฐฐ์ด discount๊ฐ ์ฃผ์ด์ก์ ๋, ํ์๋ฑ๋ก์ ์ ํ์ด๊ฐ ์ํ๋ ์ ํ์ ๋ชจ๋ ํ ์ธ ๋ฐ์ ์ ์๋ ํ์๋ฑ๋ก ๋ ์ง์ ์ด ์ผ์๋ฅผ return ํ๋ solution ํจ์๋ฅผ ์์ฑํ์์ค. ๊ฐ๋ฅํ ๋ ์ด ์์ผ๋ฉด 0์ return ํฉ๋๋ค.
์ ํ์ฌํญ
์
์ถ๋ ฅ ์
want | number | discount | result |
---|---|---|---|
["banana", "apple", "rice", "pork", "pot"] | [3,2,2,2,1] | [["chicken", "apple", "apple", "banana", "rice", "apple", "pork", "banana", "pork", "rice", "pot", "banana", "apple", "banana"]] | 3 |
["apple"] | [10] | [["banana", "banana", "banana", "banana", "banana", "banana", "banana", "banana", "banana", "banana"]] | 0 |
๋์ ํ์ด
package programmers;
import java.util.HashMap;
public class DiscountEvent {
public static int solution(String[] want, int[] number, String[] discount) {
int answer = 0;
HashMap<String, Integer> wantMap = new HashMap<>();
for(int i = 0; i < want.length; i++) {
wantMap.put(want[i], number[i]);
}
int totalDiscountDay = 0;
for(int a : number) {
totalDiscountDay += a;
}
for(int i = 0; i <= discount.length - totalDiscountDay; i++) {
HashMap<String, Integer> tempMap = new HashMap<>(wantMap);
for(int j = i; j < i + totalDiscountDay; j++) {
if(tempMap.containsKey(discount[j])) {
tempMap.put(discount[j], tempMap.get(discount[j]) - 1);
if(tempMap.get(discount[j]) == 0) {
tempMap.remove(discount[j]);
}
}
}
if(tempMap.isEmpty()) {
answer++;
}
}
return answer;
}
public static void main(String[] args) {
String[] want = {"banana", "apple", "rice", "pork", "pot"};
int[] number = {3, 2, 2, 2, 1};
String[] discount = {"chicken", "apple", "apple", "banana", "rice",
"apple", "pork", "banana", "pork", "rice", "pot", "banana", "apple", "banana"};
solution(want, number, discount);
}
}
๋์ ์๊ฐ
์ ๋ณด๋ฉด ์ ์ ์๋ฏ์ด, ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋ want
,number
๋ฅผ key, value์ ์ ์ฅํด์ผํ๋ค. ์ด๋ฅผ ์ํด map์ ์ฌ์ฉํ์์ผ๋ฉฐ map์๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์ฅ๋๋ค.
๋งํธ์์ ํ ์ธ ํ๋ ํ์ฌ ํ๋ชฉ์ ๋ด์ ๋งค๊ฐ๋ณ์ discount
๋ ํญ์ want ๋ฐฐ์ด๋ณด๋ค ํฌ๊ณ , number ์์ ๋ {3,2,2,2,1}
ํ์ํ ๊ฐฏ์์ ์ด ํฉ์ ์ ์ฅํ totalDiscountDay
์ ์ ์ฅํ๋ค.
๋ง์ฝ, discount [0] ~ discount [9] (์ด 10๊ฐ)
ํญ๋ชฉ์ด ์ฐ์์ผ๋ก ๊ฐฏ์๋ฅผ ์ฒดํฌํ์ฌ ์ ํ์ด๊ฐ ์ํ๋ want
ํญ๋ชฉ์ ๊ฐฏ์๊ฐ ๋ชจ๋ ํฌํจ๋๋์ง ํ์ธํ๋ ๋ฌธ์ ์ด๋ค.
์ฆ,
discount [0] ~ discount [9]
discount [1] ~ discount [10]
discount [2] ~ discount [11]
discount [3] ~ discount [12]
discount [4] ~ discount [13]
์์๋ก ์ฐ์์ ์ธ ๋ฐฐ์ด์ ๊ฐ์ ํ์ธํด์ผํ๋ค. ํต์ฌ ๋ก์ง์ ๋ค์๊ณผ ๊ฐ๋ค.
for(int i = 0; i <= discount.length - totalDiscountDay; i++) {
HashMap<String, Integer> tempMap = new HashMap<>(wantMap);
for(int j = i; j < i + totalDiscountDay; j++) {
if(tempMap.containsKey(discount[j])) {
tempMap.put(discount[j], tempMap.get(discount[j]) - 1);
if(tempMap.get(discount[j]) == 0) {
tempMap.remove(discount[j]);
}
}
}
if(tempMap.isEmpty()) {
answer++;
}
}
ํ์ฌ map์ ์ ์ฅ๋ ํญ๋ชฉ์ ๋ค์๊ณผ ๊ฐ๋ค.
for(int i = 0; i <= 14 - 10; i++)
HashMap<String, Integer> tempMap = new HashMap<>(wantMap)
for(int j = i; j < i + totalDiscountDay; j++)
j = 0 ; j < 0 + 10; j++
j = 1 ; j < 1 + 10; j++
j = 2 ; j < 2 + 10; j++
j = 3 ; j < 3 + 10; j++
discount [0] ~ discount [9]
discount [1] ~ discount [10]
discount [2] ~ discount [11]
discount [3] ~ discount [12]
discount [4] ~ discount [13]
if(tempMap.containsKey(discount[j])) {
tempMap.put(discount[j], tempMap.get(discount[j]) - 1);
if(tempMap.get(discount[j]) == 0) {
tempMap.remove(discount[j]);
}
}
ํด๋น ๋ก์ง์ tempMap์ discount[j]
๊ฐ๊ณผ ์ผ์นํ๋ ๊ฐ์ด ์์ผ๋ฉด value๊ฐ์ 1๊ฐ์ฉ ๋นผ์ฃผ๋ ๋ก์ง์ด๋ค. ์ฆ, tempMap ์ ๋ชจ๋ value๊ฐ์ด 0์ด๋๋ฉด , temp.remove() ๋ฉ์๋๋ฅผ ํ์ฉํ์ฌ tempMap์ ๋น ์ํ๋ก ๋ง๋ค์ด ๋ฒ๋ฆฐ๋ค. ์ฆ, discount์ ๋ชจ๋ ํญ๋ชฉ์ด want์ ํฌํจ๋๊ณ , ๊ฐฏ์๊น์ง ๋ชจ๋ ์ผ์นํ๋ฉด answer++
๋ฅผ ํตํด ์ต์ข
์ ์ผ๋ก return
ํ๋ค.
๐ ๋ฌธ3) 2์ฐจ์ ํ๋ ฌ arr1๊ณผ arr2๋ฅผ ์ ๋ ฅ๋ฐ์, arr1์ arr2๋ฅผ ๊ณฑํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ํจ์, solution์ ์์ฑํด์ฃผ์ธ์.
์ ํ์กฐ๊ฑด
arr1
, arr2
์ ํ๊ณผ ์ด์ ๊ธธ์ด๋ 2 ์ด์ 100 ์ดํ์
๋๋ค.arr1
, arr2
์ ์์๋ -10 ์ด์ 20 ์ดํ์ธ ์์ฐ์์
๋๋ค.์
์ถ๋ ฅ ์
arr1 | arr2 | return |
---|---|---|
[[1, 4], [3, 2], [4, 1]] | [[3, 3], [3, 3]] | [[15, 15], [15, 15], [15, 15]] |
[[2, 3, 2], [4, 2, 4], [3, 1, 4]] | [[5, 4, 3], [2, 4, 1], [3, 1, 1]] | [[22, 22, 11], [36, 28, 18], [29, 20, 14]] |
๋์ ํ์ด
package programmers;
public class MatrixProduct {
public static int[][] solution(int[][] arr1, int[][] arr2) {
int row1 = arr1.length;
int col1 = arr1[0].length;
int row2 = arr2.length;
int col2 = arr2[0].length;
int[][] answer = new int[row1][col2];
for(int i = 0; i < row1; i++) {
for(int j = 0; j < col2; j++) {
int sum = 0;
for(int k = 0; k < col1; k++) {
sum += arr1[i][k] * arr2[k][j];
}
answer[i][j] = sum;
}
}
return answer;
}
public static void main(String[] args) {
int[][] arr1 = new int[][] {{1,4},{3,2},{4,1}};
int[][] arr2 = new int[][] {{3,3},{3,3}};
solution(arr1, arr2);
}
}
๋์ ์๊ฐ
ํ๋ ฌ์ ๊ณฑ์
์์๋ arr1
์ ์ด ์ (col1
)์ arr2
์ ํ์ (row2)
๊ฐ ๊ฐ์์ผํ๋ค.
๊ฒฐ๊ณผ ํ๋ ฌ์ ํฌ๊ธฐ ๊ฒฐ์
answer
์ ํฌ๊ธฐ๋ arr1
์ ํ์(row1
) * arr2
์ ์ด ์(col2
)๋ก ๊ฒฐ์ ํต์ฌ ๋ก์ง
for(int i = 0; i < row1; i++) {
for(int j = 0; j < col2; j++) {
int sum = 0;
for(int k = 0; k < col1; k++) {
sum += arr1[i][k] * arr2[k][j];
}
answer[i][j] = sum;
}
}
sum += arr1[i][k] * arr2[k][j]
arr1
์ ์ด์ k
์ arr2
์ ํ์ k
๊ฐ ๊ฐ์์ผ ํ๋ค๋ ์กฐ๊ฑด์ ๋ง์กฑ๐ ๋ฌธ4) ์ง๋๊ฐ๋ฐํ์์ ๊ทผ๋ฌดํ๋ ์ ์ด์ง๋ ์ง๋์์ ๋์ ์ด๋ฆ์ ๊ฒ์ํ๋ฉด ํด๋น ๋์์ ๊ด๋ จ๋ ๋ง์ง ๊ฒ์๋ฌผ๋ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฝ์ด ๋ณด์ฌ์ฃผ๋ ์๋น์ค๋ฅผ ๊ฐ๋ฐํ๊ณ ์๋ค.
์ด ํ๋ก๊ทธ๋จ์ ํ
์คํ
์
๋ฌด๋ฅผ ๋ด๋นํ๊ณ ์๋ ์ดํผ์น๋ ์๋น์ค๋ฅผ ์คํํ๊ธฐ ์ ๊ฐ ๋ก์ง์ ๋ํ ์ฑ๋ฅ ์ธก์ ์ ์ํํ์๋๋ฐ, ์ ์ด์ง๊ฐ ์์ฑํ ๋ถ๋ถ ์ค ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ฒ์๋ฌผ์ ๊ฐ์ ธ์ค๋ ๋ถ๋ถ์ ์คํ์๊ฐ์ด ๋๋ฌด ์ค๋ ๊ฑธ๋ฆฐ๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค.
์ดํผ์น๋ ์ ์ด์ง์๊ฒ ํด๋น ๋ก์ง์ ๊ฐ์ ํ๋ผ๊ณ ๋ฆ๋ฌํ๊ธฐ ์์ํ์๊ณ , ์ ์ด์ง๋ DB ์บ์๋ฅผ ์ ์ฉํ์ฌ ์ฑ๋ฅ ๊ฐ์ ์ ์๋ํ๊ณ ์์ง๋ง ์บ์ ํฌ๊ธฐ๋ฅผ ์ผ๋ง๋ก ํด์ผ ํจ์จ์ ์ธ์ง ๋ชฐ๋ผ ๋๊ฐํ ์ํฉ์ด๋ค.
์ดํผ์น์๊ฒ ์๋ฌ๋ฆฌ๋ ์ ์ด์ง๋ฅผ ๋์, DB ์บ์๋ฅผ ์ ์ฉํ ๋ ์บ์ ํฌ๊ธฐ์ ๋ฐ๋ฅธ ์คํ์๊ฐ ์ธก์ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์
๋ ฅ ํ์
์ถ๋ ฅ ํ์
์กฐ๊ฑด
์
์ถ๋ ฅ ์
์บ์ํฌ๊ธฐ(cacheSize) | ๋์์ด๋ฆ(cities) | ์คํ์๊ฐ |
---|---|---|
3 | ["Jeju", "Pangyo", "Seoul", "NewYork", "LA", "Jeju", "Pangyo", "Seoul", "NewYork", "LA"] | 50 |
3 | ["Jeju", "Pangyo", "Seoul", "Jeju", "Pangyo", "Seoul", "Jeju", "Pangyo", "Seoul"] | 21 |
2 | ["Jeju", "Pangyo", "Seoul", "NewYork", "LA", "SanFrancisco", "Seoul", "Rome", "Paris", "Jeju", "NewYork", "Rome"] | 60 |
5 | ["Jeju", "Pangyo", "Seoul", "NewYork", "LA", "SanFrancisco", "Seoul", "Rome", "Paris", "Jeju", "NewYork", "Rome"] | 52 |
2 | ["Jeju", "Pangyo", "NewYork", "newyork"] | 16 |
0 | ["Jeju", "Pangyo", "Seoul", "NewYork", "LA"] | 25 |
๋์ ํ์ด
package programmers;
import java.util.LinkedList;
public class Cache {
public static int solution(int cacheSize, String[] cities) {
LinkedList<String> cityList = new LinkedList<>();
int runTime = 0;
for(String city : cities) {
city = city.toLowerCase();
if(cityList.contains(city)) {
cityList.remove(city);
runTime += 1;
}else {
if(cityList.size() == cacheSize && cacheSize != 0) {
cityList.removeFirst();
}
runTime += 5;
}
if(cacheSize != 0) {
cityList.addLast(city);
}
}
return runTime;
}
public static void main(String[] args) {
String[] cities = {"Jeju", "Pangyo", "Seoul", "Jeju", "Pangyo", "Seoul", "Jeju", "Pangyo", "Seoul"};
solution(3, cities);
}
}
๋์ ์๊ฐ
LRU(Least Recently Used)
ํ์ด์ง ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ ์ค ํ๋๋ก ์บ์์์ ๊ฐ์ฅ ์ค๋ซ๋์ ์ฌ์ฉ๋์ง ์์ ํญ๋ชฉ์ ์๋ณํ์ฌ ์๋ก์ด ๋ฐ์ดํฐ๋ก ๋์ฒดํ ๋ ์ฌ์ฉ
์บ์์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ ๋๋ง๋ค, ํด๋น ๋ฐ์ดํฐ์ ๋ํ ์ต๊ทผ ์ฌ์ฉ ์์
์ ๊ธฐ๋ก
์บ์๊ฐ ๊ฐ๋ ์ฐผ์ ๋ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ ค๊ณ ํ๋ฉด, ๊ฐ์ฅ ์ค๋ ์ ์ ์ฌ์ฉ๋ ๋ฐ์ดํฐ (์ฆ, ๊ฐ์ฅ ์ต๊ทผ์ ์ฌ์ฉ๋์ง ์์ ๋ฐ์ดํฐ)๋ฅผ ์บ์์์ ์ ๊ฑฐํ๊ณ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ฝ์
์์ 1๋ฒ ์์
cacheSize = 3
cities = ["Jeju", "Pangyo", "Seoul", "NewYork", "LA", "Jeju", "Pangyo", "Seoul", "NewYork", "LA"]
์์ํ ๋, ์บ์๋ ๋น์ด์์
[Jeju]
(Jeju ์บ์์ ์ถ๊ฐ๋จ)[Jeju,Pangyo]
(Pangyo ์บ์์ ์ถ๊ฐ๋จ)[Jeju,Pangyo,Seoul]
(Seoul ์บ์์ ์ถ๊ฐ๋จ)์ด ์์ ์์๋ ์บ์๊ฐ ๊ฝ ์ฐจ ์์, ๋ฐ๋ผ์ ์๋ก์ด ๋์๋ฅผ ์บ์์ ์ถ๊ฐํ๊ธฐ ์ํด์๋ ๊ฐ์ฅ ์ค๋ ์ ์ ์ฌ์ฉ๋ ๋์๋ฅผ ์ ๊ฑฐํด์ผํจ
[Pangyo, Seoul, NewYork]
(NewYork ์บ์์ ์ถ๊ฐ๋จ)์ด์ Pangyo๊ฐ ๊ฐ์ฅ ์ค๋ ์ ์ ์ฌ์ฉ๋ ๋์
[Seoul,NewYork,LA]
(LA ์บ์์ ์ถ๊ฐ๋จ)๊ณ์ ์งํํ๋ฉด์ ๊ฐ ๋จ๊ณ๋ณ๋ก ์คํ ์๊ฐ์ ๋์ ํ๋ฉด ์ต์ข
์คํ ์๊ฐ์ 50
์ด ๋จ
์ฃผ์ ๋ก์ง์ ์ดํด๋ณด์
ํต์ฌ ๋ก์ง์ ๋ค์๊ณผ ๊ฐ๋ค.
LinkedList<String> cityList = new LinkedList<>();
int runTime = 0;
for(String city : cities) {
city = city.toLowerCase();
if(cityList.contains(city)) {
cityList.remove(city);
runTime += 1;
}else {
if(cityList.size() == cacheSize && cacheSize != 0) {
cityList.removeFirst();
}
runTime += 5;
}
if(cacheSize != 0) {
cityList.addLast(city);
}
}
๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋ int cacheSize, String[] cities
๋ฅผ ๋ฐํ์ผ๋ก List์ maxSize์ ๋์ด๋ cities
๋ฅผ ๋ด์ List
๋ฅผ ์ ์ธํ๋๋ฐ, ์บ์๋ ์์๊ฐ ์ค์ํ๊ธฐ๋๋ฌธ์ ์์๊น์ง ์ ์ฅํ๋ LinkedList
๋ฅผ ์ฌ์ฉ. ๊ทธ๋ฆฌ๊ณ ์ ์ฒด cities
๋ฅผ ์ํํ๋๋ฐ, ์ํํ ๋์ ๋ชจ๋ city = city.toLowCase()
๋ก ์๋ฌธ์๋ก ๋ณํ(๋์๋ฌธ์ ๊ตฌ๋ณ ์์)ํ๋ค. ์ฒ์ 3๊ฐ์ ๋์๋ cityList
์ ํฌํจ๋ผ์์ง ์๊ธฐ๋๋ฌธ์ runTime +=5
๋ฐ if(cacheSize != 0){cityList.addLast(city)}
์์ ๋์ํ๋ฉฐ cacheSize์ cityList์ size๊ฐ ๊ฐ์์ง๋ ์๊ฐ๋ถํฐ cityList์ ์ฒซ๋ฒ์งธ Index๋ฅผ ์ ๊ฑฐ, ๋ค์ city๋ฅผ ๋งจ๋์ ์ถ๊ฐํ๋ ๋ฐฉ์์ด๋ค. ๋ง์ฝ, cityList
์ ์กด์ฌํ๋ ๋์๊ฐ ๋ค์ ๋ฑ์ฅํ๋ฉด, cityList
์์ ํด๋น ๋์์ ์ด๋ฆ์ ์ ๊ฑฐํ๊ณ , runTime +=1;
์ดํ, ๋ค์ ๊ทธ ๋์๋ฅผ cityList
๋งจ ๋์ ์ถ๊ฐํ๋ค.
๐ ๋ฌธ5) ์ฝ๋๋ ๋งค์ผ ๋ค๋ฅธ ์ท์ ์กฐํฉํ์ฌ ์ ๋๊ฒ์ ์ข์ํฉ๋๋ค.
์๋ฅผ ๋ค์ด ์ฝ๋๊ฐ ๊ฐ์ง ์ท์ด ์๋์ ๊ฐ๊ณ , ์ค๋ ์ฝ๋๊ฐ ๋๊ทธ๋ ์๊ฒฝ, ๊ธด ์ฝํธ, ํ๋์ ํฐ์ ์ธ ๋ฅผ ์ ์๋ค๋ฉด ๋ค์๋ ์ ์ฒญ๋ฐ์ง๋ฅผ ์ถ๊ฐ๋ก ์ ๊ฑฐ๋ ๋๊ทธ๋ ์๊ฒฝ ๋์ ๊ฒ์ ์ ๊ธ๋ผ์ค๋ฅผ ์ฐฉ์ฉํ๊ฑฐ๋ ํด์ผํฉ๋๋ค.
์ข ๋ฅ | ์ด๋ฆ |
---|---|
์ผ๊ตด | ๋๊ทธ๋ ์๊ฒฝ, ๊ฒ์ ์ ๊ธ๋ผ์ค |
์์ | ํ๋์ ํฐ์ ์ธ |
ํ์ | ์ฒญ๋ฐ์ง |
๊ฒ์ท | ๊ธด ์ฝํธ |
์ฝ๋๊ฐ ๊ฐ์ง ์์๋ค์ด ๋ด๊ธด 2์ฐจ์ ๋ฐฐ์ด clothes๊ฐ ์ฃผ์ด์ง ๋ ์๋ก ๋ค๋ฅธ ์ท์ ์กฐํฉ์ ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
[์์์ ์ด๋ฆ, ์์์ ์ข
๋ฅ]
๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.์
์ถ๋ ฅ ์
clothes | return |
---|---|
[["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"] ] | 5 |
[["crow_mask", "face"], ["blue_sunglasses", "face"], ["smoky_makeup", "face"]] | 3 |
์
์ถ๋ ฅ ์ ์ค๋ช
์์ #1
1. yellow_hat
2. blue_sunglasses
3. green_turban
4. yellow_hat + blue_sunglasses
5. green_turban + blue_sunglasses
์์ #2
1. crow_mask
2. blue_sunglasses
3. smoky_makeup
๋์ ํ์ด
package programmers;
import java.util.ArrayList;
import java.util.HashMap;
public class Clothes {
public static int solution(String[][] clothes) {
int answer = 1;
HashMap<String, ArrayList<String>> clothesMap = new HashMap<>();
for(String[] cloth : clothes) {
String clothName = cloth[0];
String clothType = cloth[1];
if(!clothesMap.containsKey(clothType)) {
clothesMap.put(clothType, new ArrayList<>());
}
clothesMap.get(clothType).add(clothName);
}
for(ArrayList<String> value : clothesMap.values()) {
answer *= (value.size() + 1);
}
return answer - 1;
}
public static void main(String[] args) {
String[][] clothes = {{"crow_mask", "face"}, {"blue_sunglasses", "face"}, {"smoky_makeup", "face"}};
solution(clothes);
}
}
๋์ ์๊ฐ
์์์ ์ข
๋ฅ์ ์์์ ์ด๋ฆ์ Map ํ์์ผ๋ก ์์์ ์ข
๋ฅ๋ key
, ์์์ ์ด๋ฆ๋ค์ value
๋ก ๋ค์ด๊ฐ๋๋ฐ, value์ ํ์์ ArrayList
๋ก valuer๊ฐ์ด ํ๋๊ฐ ๋ ์๋, ์ฌ๋ฌ๊ฐ๊ฐ ๋ ์ ์๋๋ก ๊ตฌ์ฑํ์๋ค.
for(String[] cloth : clothes) {
String clothName = cloth[0];
String clothType = cloth[1];
if(!clothesMap.containsKey(clothType)) {
clothesMap.put(clothType, new ArrayList<>());
}
clothesMap.get(clothType).add(clothName);
}
for๋ฌธ ๋ด๋ถ์ ์ง์ญ๋ณ์๋ก ์ ์ธํ์ฌ for๋ฌธ ๋ฐ๋ณต์ ์งํํ๋ฉด์ ๊ทธ ๊ฐ๋ค์ด ๋ณ๊ฒฝ๋๊ฒ๋ ๊ตฌ์ฑํ์๋ค.
clothesMap
์ ์์์ ์ข
๋ฅ๊ฐ ์์ผ๋ฉด clothType
๊ณผ, new ArrayList<>()
(์๋ก์ด ArrayList)๋ฅผ ์์ฑํ์๋ค. ๊ทธ๋ฆฌ๊ณ ํด๋นํ๋ key๊ฐ์ด ์กด์ฌํ๋ค๋ฉด, key์ ํด๋นํ๋ value๊ฐ์ ํ๋์ฉ ์ถ๊ฐํด์ฃผ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉ
key, value๋ก Map์ ๊ตฌ์ฑํ ๋ชจ์ต
์ ์ ๋ ๊ฐ์ ๋ฐํ์ผ๋ก ์กฐํฉ์ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
์์์ ์ ํํ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๊ธฐ ์ํด์ ๊ฐ ์์ ์นดํ ๊ณ ๋ฆฌ(type)๋ณ๋ก ์ ํํ์ง ์๋ ๊ฒฝ์ฐ๋ฅผ ํฌํจํด์ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๊ณ , ๋ชจ๋ ์์์ ์ ํํ์ง ์๋ ๊ฒฝ์ฐ 1์ ๋นผ๋ฉด๋๋ค.
๊ฐ ์์ ์นดํ
๊ณ ๋ฆฌ๋ณ๋ก ์ ํํ๋ ๊ฒฝ์ฐ์ ์๋ ํด๋น ์นดํ
๊ณ ๋ฆฌ์ ์์ ๊ฐ์
+1(์ ํํ์ง ์๋ ๊ฒฝ์ฐ)
์ด ๊ฒฝ์ฐ์ ์๋ ๊ฐ ์นดํ ๊ณ ๋ฆฌ๋ณ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ชจ๋ ๊ณฑํ ํ, ๋ชจ๋ ์์์ ์ ํํ์ง ์๋ ๊ฒฝ์ฐ 1์ ๋บ ๊ฒ.
๋ฐ๋ผ์ ์ด ๊ฒฝ์ฐ์ ์๋ 2 * 3 -1 = 5
๋ก์ง์ ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๊ตฌํํ๋ฉด ๋ก์ง ์ค๊ณ๋๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์