728x90

두 문자열이 포함하고 있는 수들 중 공통으로 가지고 있는 수를 이용하여 만들 수 있는 가장 큰 수

public String solution(String X, String Y) {

StringBuilder answer = new StringBuilder();

int[] cArr = new int[10];

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

int xlen = X.length();

int ylen = Y.length();

X = X.replaceAll(i+"", "");

Y = Y.replaceAll(i+"", "");

xlen = xlen-X.length();

ylen = ylen-Y.length();

if(xlen>0&&ylen>0) {

cArr[i] = Math.min(xlen, ylen);

}

}

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

int num = cArr[cArr.length-1-i];

if(num!=0) {

String add = (9-i)+"";

answer.append(add.repeat(num));

}

}

if(answer.length()==0)return "-1";

if(answer.charAt(0)=='0')return "0";

return answer.toString();

}

X,Y의 길이가 3백만까지 제한되어있고, 0으로 시작하지 않는 제한 조건이 있다. 

길이 문제로 시간초과, int타입 제한에 문제가 발생할 수 있다. 

시간초과 문제를 해결하기 위해 StringBuilder를 사용하였고 

""과 "0.."등을 확인할 때

정수형 타입의 길이 제한을 피하기 위해 toString으로 변환한 뒤 확인하려하면 overflow의 문제가 발생하므로 

length 와 charAt메서드를 사용하여 확인하였다. 

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

모의고사 문제 풀이  (0) 2023.09.30
개인정보 수집 유효 기간 문제 풀이  (0) 2023.09.28
옹알이2 문제 풀이  (0) 2023.09.28
과일 장수 문제 풀이  (0) 2023.09.28
2016년 문제 풀이  (0) 2023.09.28
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

+ Recent posts