728x90

숫자를 영어로 표현한 문자열을 숫자로 바꾸어 반환

 

public long solution(String numbers) {

long answer = 0;

int len = numbers.length();

while(numbers.length()>2){

 

if(numbers.startsWith("zero")){

answer= answer*10;

numbers= numbers.replaceFirst("zero","");

}else if(numbers.startsWith("one")){

answer= answer*10+1;

numbers=numbers.replaceFirst("one","");

}else if(numbers.startsWith("two")){

answer= answer*10+2;

numbers=numbers.replaceFirst("two","");

}else if(numbers.startsWith("three")){

answer= answer*10+3;

numbers=numbers.replaceFirst("three","");

}else if(numbers.startsWith("four")){

answer= answer*10+4;

numbers= numbers.replaceFirst("four","");

}else if(numbers.startsWith("five")){

answer= answer*10+5;

numbers= numbers.replaceFirst("five","");

}else if(numbers.startsWith("six")){

answer= answer*10+6;

numbers= numbers.replaceFirst("six","");

}else if(numbers.startsWith("seven")){

answer= answer*10+7;

numbers= numbers.replaceFirst("seven","");

}else if(numbers.startsWith("eight")){

answer= answer*10+8;

numbers= numbers.replaceFirst("eight","");

}else if(numbers.startsWith("nine")){

answer= answer*10+9;

numbers= numbers.replaceFirst("nine","");

}

if(numbers.length()<3)break;

}

return answer;

}

앞에서부터 영어 문자를 찾아 숫자로 치환 

 

개선 

 

public long solution2(String numbers) {

return Long.parseLong(

numbers.replaceAll("zero", "0")

.replaceAll("one", "1")

.replaceAll("two", "2")

.replaceAll("three", "3")

.replaceAll("four", "4")

.replaceAll("five", "5")

.replaceAll("six", "6")

.replaceAll("seven", "7")

.replaceAll("eight", "8")

.replaceAll("nine", "9")

);

}

모든 영문자를 치환하고 parseLong 메소드 사용 

 

개선

 

public long solution3(String numbers) {

String[] numbers_arr = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};

 

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

numbers = numbers.replaceAll(numbers_arr[i], String.valueOf(i));

}

 

long answer = Long.parseLong(numbers);

return answer;

}

영문을 배열로 바꾸어 반복문을 사용하고 영문은 String.valueOf로 숫자형으로 변환

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

등수 매기기 문제풀이  (0) 2023.09.15
삼각형의 완성조건(2) 문제풀이  (0) 2023.09.15
공 던지기 문제풀이  (0) 2023.09.14
숨어있는 숫자 덧셈(2) 문제풀이  (0) 2023.09.13
외계어 사전  (0) 2023.09.12
728x90

공은 옆사람 건너띄고 다음사람에게만 던지며 

마지막 배열의 원소 다음은 처음 원소와 맞닿아 있다.

 

k번 던질 때 마지막으로 던지는 사람은?

 

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

Queue<Integer> list = new LinkedList<>();

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

list.offer(numbers[j]);

}

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

list.offer(list.poll());

list.offer(list.poll());

}

return list.peek();

}

맨 마지막 사람과 처음 사람이 맞닿아 있는것을 표현하기위해서  Queue 로 표현했다.

 

 

다른 풀이

k-1번 던진다는 뜻은 0번 인덱스에서 +2씩 k-1번 인덱스로 옮긴다는것이다. 

=> 2k-2번 인덱스가  마지막으로 던질 사람이다. 

만약 3명이 3번 던진다면 5번인덱스 => 1,2,3,1,2   5번 인덱스는 ==2

식으로 나타내면 numbers[(2*k-2)%numbers.length+1]이다.

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

return numbers[(2*k-2)%numbers.length];

}

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

삼각형의 완성조건(2) 문제풀이  (0) 2023.09.15
영어가 싫어요 문제풀이  (0) 2023.09.14
숨어있는 숫자 덧셈(2) 문제풀이  (0) 2023.09.13
외계어 사전  (0) 2023.09.12
특이한 정렬 문제풀이  (1) 2023.09.12
728x90

문자열 사이 숨어있는 숫자들만 더한 값을 반환

이때, 연속한 숫자는 붙여서 계산한다.   

 

public int solution(String my_string) {

int answer = 0;

char[] arr = my_string.toCharArray();

int temp = 0;

if (Character.isDigit(arr[0])) {

temp = temp + arr[0] - '0';

}

for (int i = 1; i < my_string.length(); i++) {

if (Character.isDigit(arr[i]) && Character.isDigit(arr[i - 1])) {

temp = temp * 10 + arr[i] - '0';

} else if (Character.isDigit(arr[i])) {

temp = temp + arr[i] - '0';

} else {

answer += temp;

temp = 0;

}

}

answer += temp;

return answer;

}

replace 메소드를 사용해서 풀 수 있을거 같았는데 정규식 없이는 오히려 복잡해 질 거 같아

직접 숫자를 분류했다. 

숫자를 만나면 일단 temp에 초기화 시켜두고 다음 원소에서 숫자를 만나면 temp의 값에 10을 곱하고 숫자를 더했다.

 

public int solution2(String my_string) {

int answer = 0;

 

String[] arr = my_string.replaceAll("[a-zA-Z]", " ").split(" ");

 

for(String s : str){

if(!s.equals("")) answer += Integer.parseInt(s);

}

 

return answer;

}

     정규식을 사용한 다른사람의 풀이를 참고해 풀어보았다.

모든영어를 " "공백Str으로 변환하고  다시 " "으로 분할하여 String 배열로 반환한다. 

이때 split 메소드를 사용한 이유는 toCharArray로 바꾸면 연속한 숫자도 원소로 분할되기 때문에 split메소드로 변환하여 

연속한 숫자를 유지해준다.

 

forEach로 Str 배열을 순회하면서 "" nullString 이 아닌 경우만 더해주면 된다.  

 

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

영어가 싫어요 문제풀이  (0) 2023.09.14
공 던지기 문제풀이  (0) 2023.09.14
외계어 사전  (0) 2023.09.12
특이한 정렬 문제풀이  (1) 2023.09.12
A로 B 만들기 문제풀이  (0) 2023.09.11
728x90

dic 문자열배열의 원소 중 spell 문자열 배열의 원소를 모두 한번씩만 사용한 원소가 있다면 1 반환 아니면 2  반환    

 

spell={"z","d","x"};

dic={"dww","dzx","loveaw"};

 

dic원소에서 spell원소를 제거하면 한 문자만 제거 되어 길이는 1만 짧아져야 한다. 

 

dic원소를 모두 돌면서 spell 원소를 모두 제거해 보았을 때, 각각 1씩만 짧아지는 원소가 있다면 1 반환 

그런 원소가 하나라도 없다면 2를 반환

 

 

public int solution(String[] spell, String[] dic) {

int answer = 0;

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

boolean b = true;

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

if(dic[i].length()-1!=dic[i].replace(spell[j], "").length()) {

b=false;

break;

}

}

if(b)return 1;

}

return 2;

}

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

공 던지기 문제풀이  (0) 2023.09.14
숨어있는 숫자 덧셈(2) 문제풀이  (0) 2023.09.13
특이한 정렬 문제풀이  (1) 2023.09.12
A로 B 만들기 문제풀이  (0) 2023.09.11
팩토리얼  (0) 2023.09.11

+ Recent posts