23-06-16
가운데 글자 가져오기
💡 단어 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은 불변 객체라는것을 알았다.