ta_chan 2023. 6. 16. 22:14

가운데 글자 가져오기

💡 단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.

재한사항

  • s는 길이가 1 이상, 100이하인 스트링입니다.

입출력 예

s return

"abcde" "c"
"qwer" "we"

나의 코드

import java.util.*;
class Solution {
   public String solution(String s) {
                //s의 짝수/홀수를 구분
                //s의 가운데 위치를 구분
                String[] split = s.split("");
                if(split.length%2!=0){
                        int i1 = (split.length - 1) / 2;
                    return split[i1];

                }else{
                    int i = split.length / 2;
                    return split[i-1]+split[i];
                
            }
}
}

다른코드1

String getMiddle(String word){
return word.substring((word.length()-1)/2, word.length()/2 + 1);
    }

스트링.substring(int beginIndex, int endIndex**)**는 geginIndex ≤x <endIdex의 관계이다.

자바에서 정수의 나눗셈은 항상 버림이기 때문에, word.length()-1의 값이 정수이면 그냥두고, 소수이면 버림한다.

정수 : 길이가 6인 문자열을 입력했을때, 시작인덱스는 2가되고 끝 인덱스는 4가되버린다.

즉 x는 2,3이 되어버려서 2글자가 리턴된다.

홀수 : 길이가 5인 문자열을 입력했을때, 시작인덱스는 2가되고 끝인덱스는 3이된다

즉, x는 2가 되어 1글자가 리턴된다.

 

위 코드는 좀 감탄스럽다. substring으로 이렇게 간단하게 압축할수있을줄은 몰랐다.

 


수박수박수박수박수박수?

💡 문제 설명

길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다.

제한 조건

  • n은 길이 10,000이하인 자연수입니다.

입출력 예

n return

3 "수박수"
4 "수박수박"

나의코드

import java.util.*;
class Solution {
     public String solution(int n) {
                String[] answer =new String [n];
                for(int i=0;i<n;i++){
                  answer[i] = (i%2==0 ? "수" :  "박");
                }
                return String.join("",answer);
            }
}

다른코드1

public class WaterMelon {
    public String watermelon(int n){

        return new String(new char [n/2+1]).replace("\\0", "수박").substring(0,n);
    }

단어의 크기만 지정된 char 배열을 만든다. 만약 n이 3이면 [null,null] 이 생성된다.

replace 함수로 null을 “수박”으로 교체한다. 여기서 “\0”은 문자열로 표현한 null 이다.

그 후 substring 으로 배열을 자르면, 0<x<3이 되므로 “수박수”가 된다.

이 코드는 간결성은 좋지만, 한눈에 알아보기가 힘들다.

 

다른코드2

public String solution(int n) {
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < n; i++){
            sb.append((i % 2 == 0) ? "수" : "박");
        }
        return sb.toString();
    }
}

이 코드는 StringBuilder와 3항연산자를 이용했다.

i의 값이 짝수면 “수”를 추가, 홀수면 “박”을 추가한다.

Stringbuilder는 가변이므로, String처럼 계속 객체를 생성할 필요가 없으므로 효율적이다.

 

오늘의 학습

  • 스트링 자체에서 substring이라는 함수가 범위를 지정할수있다는것을 알았다.
  • 단순 정수는 값을 나누었을때 소숫점으로 나누어지면 버림을 한다는것을 알게 되었다.
  • String은 char의 배열로 이루어졌다는것을 알았다.
  • null을 문자열로 표현할때는 “\0”이라는것을 알았다.
  • StringBuilder는 가변객체, String은 불변 객체라는것을 알았다.