728x90

"aya", "ye", "ma", "woo"  발음의 조합밖에 발음하지 못하고 

같은 발음을 연속해서 하지 못할 때 

주어진 문자열 배열에서 발음할 수 있는 가지 수 반환 

 

public int solution(String[] babbling) {

int answer = 0;

String[] can = { "aya", "ye", "woo", "ma" };

for (int i = 0; i < babbling.length; i++) {

if (babbling[i].contains("ayaaya") || babbling[i].contains("yeye") || babbling[i].contains("woowoo")

|| babbling[i].contains("mama")) {

continue;

}

for (int j = 0; j < can.length; j++) {

babbling[i] = babbling[i].replaceAll(can[j], "1");

}

babbling[i] = babbling[i].replaceAll("1", "");

if (babbling[i].equals("")) {

answer++;

}

}

return answer;

}

핵심은 replaceAll 메서드를 사용할 때 가능한 발음을 바로 nullString으로 치환해버리면 

불가능했던 발음이 사이에 가능한 발음이 사라져 붙으면서 가능한 발음으로 바뀌는 경우가 생기기 때문에 

can 발음을 일단 1이나 다른 소문자가 아닌 문자로 바꾸고 마지막에 한번더 nullString으로 바꿔주는 작업을 해야한다. 

 

'Java > Coding Test' 카테고리의 다른 글

개인정보 수집 유효 기간 문제 풀이  (0) 2023.09.28
숫자 짝궁 문제 풀이  (1) 2023.09.28
과일 장수 문제 풀이  (0) 2023.09.28
2016년 문제 풀이  (0) 2023.09.28
명예의 전당(1) 문제풀이  (0) 2023.09.27
728x90

과일의 점수가 담긴 배열이 있고 한 상자에 담을 수 있는 최대 개수가 주어질 때 

과일 상자의 가격은 과일의 개수*상자에 담긴 과일의 최저 점수 이다. 

배열이 주어질 때 과일 장수가 얻을 수 있는 최대 이익 반환 

public int solution(int k, int m, int[] score) {

Arrays.sort(score);

int len = score.length;

int answer = 0;

for (int i = len-m; i>=0; i-=m) {

answer+=score[i]*m;

}

return answer;

}

score를 정렬하고 뒤(가장 큰 수)부터 m개씩 빼서 각 상자에 담길 최저 점수를 구하고 m을 곱해서 답을 구한다.

'Java > Coding Test' 카테고리의 다른 글

숫자 짝궁 문제 풀이  (1) 2023.09.28
옹알이2 문제 풀이  (0) 2023.09.28
2016년 문제 풀이  (0) 2023.09.28
명예의 전당(1) 문제풀이  (0) 2023.09.27
가장 가까운 같은 글자 문제풀이  (0) 2023.09.26
728x90

2016.01.01.은 금요일이다. 

2016년은 윤년이고 2016년의 월, 일이 주어질때 요일을 반환 

윤년은 2월이 29일

public String solution(int a, int b) {

String answer = "FRI";

int dayAfter = 0;

if(a==1) {

dayAfter=b-1;

}else if(a==2) {

dayAfter=31+b-1;

}else if(a==3) {

dayAfter=31+29+b-1;

}else if(a==4) {

dayAfter=31+29+31+b-1;

}else if(a==5) {

dayAfter=31+29+31+30+b-1;

}else if(a==6) {

dayAfter=31+29+31+30+31+b-1;

}else if(a==7) {

dayAfter=31+29+31+30+31+30+b-1;

}else if(a==8) {

dayAfter=31+29+31+30+31+30+31+b-1;

}else if(a==9) {

dayAfter=31+29+31+30+31+30+31+31+b-1;

}else if(a==10) {

dayAfter=31+29+31+30+31+30+31+31+30+b-1;

}else if(a==11) {

dayAfter=31+29+31+30+31+30+31+31+30+31+b-1;

}else if(a==12) {

dayAfter=31+29+31+30+31+30+31+31+30+31+30+b-1;

}

if(dayAfter%7==1) {

return "SAT";

}

if(dayAfter%7==2) {

return "SUN";

}

if(dayAfter%7==3) {

return "MON";

}

if(dayAfter%7==4) {

return "TUE";

}

if(dayAfter%7==5) {

return "WED";

}

if(dayAfter%7==6) {

return "THU";

}

return answer;

}

단순 노가다로 계산

 

월 별 일수 계산을 배열에 담아 조금 수월하게 만들었다. 

public String solution2(int a, int b) {

String answer = "";

String[] day = { "FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU" };

int[] date = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

int allDate = 0;

for (int i = 0; i < a - 1; i++) {

allDate += date[i];

}

allDate += (b - 1);

answer = day[allDate % 7];

 

return answer;

}

 

++API 사용

public String solution3(int a, int b) {

return LocalDate.of(2016, a, b).getDayOfWeek().toString().substring(0,3);

}

LocalDate의 of로 2016년 a월 b일의 날짜에 getDayOfWeek 메서드로 요일을 찾아 String 타입으로 변환해주면 

XXXDAY  형식으로 반환해준다. 문제는 앞의 세자리만 반환하도록 substring 

 

'Java > Coding Test' 카테고리의 다른 글

옹알이2 문제 풀이  (0) 2023.09.28
과일 장수 문제 풀이  (0) 2023.09.28
명예의 전당(1) 문제풀이  (0) 2023.09.27
가장 가까운 같은 글자 문제풀이  (0) 2023.09.26
시저 암호 문제풀이  (0) 2023.09.25
728x90

명예의 전당에는 최대 n개의 수가 들어갈 수 있으며, n개 이후부터 추가될 때에는 

명예의 전당에 있는 수보다 큰 수가 들어오면 가장 작은 수는 빠진다. 

명예의 전당에 수가 추가될 때마다 명예의 전당에 있는 수 중 가장 작은 수를 배열로 반환 

 

public int[] solution(int k, int[] score) {

int[] answer = new int[score.length];

ArrayList<Integer> honors = new ArrayList<Integer>();

for (int i = 0; i < score.length; i++) {

if (i < k) {

honors.add(score[i]);

Collections.sort(honors);

} else if (score[i] >= honors.get(0)) {

honors.add(score[i]);

Collections.sort(honors);

honors.remove(0);

}

answer[i] = honors.get(0);

}

return answer;

}

리스트에 수를 넣는데 매번 가장 작은 수를 찾아서 제거한다. 

가장 작은 수를 찾기 위해 매 반복마다 정렬을 수행하는데 

대신 priority Queue 를 사용하면 가장 작은 수를 찾아서 poll 할 수 있다. 

public int[] solution2(int k, int[] score) {

int[] answer = new int[score.length];

 

PriorityQueue<Integer> priorityQueue = new PriorityQueue<>();

for (int i = 0; i < score.length; i++) {

priorityQueue.add(score[i]);

if (priorityQueue.size() > k) {

priorityQueue.poll();

}

answer[i] = priorityQueue.peek();

}

return answer;

}

k일 이전까지는 계속 추가하고 가장 앞의 값을 answer 배열에 추가하고 

k일 이후부터는 원소 추가 이후 가장 작은 값을 없애고 answer 배열에 남은 수 중 가장 작은 값을 추가한다.

 

priorityQueue는 가장 작은 수를 우선순위로 둔다. 

만약 가장 큰 수를 우선순위로 두고 싶다면 

PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(Collections.reverseOrder());

Collections.reverseOrder()로 queue의 순서를 뒤집어준다. 

'Java > Coding Test' 카테고리의 다른 글

과일 장수 문제 풀이  (0) 2023.09.28
2016년 문제 풀이  (0) 2023.09.28
가장 가까운 같은 글자 문제풀이  (0) 2023.09.26
시저 암호 문제풀이  (0) 2023.09.25
삼총사 문제풀이  (0) 2023.09.25

+ Recent posts