문제 설명
단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요.
단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.
재한사항
- s는 길이가 1 이상, 100이하인 스트링입니다.
Step1. 문제분석
문제는 이해를 했다.
abcde 홀수
qwer 짝수
그중 홀수는 가운데 글자만, 짝수는 그 가운데에 2글자를
index가 0,1,2,3 이런식이면 1,2를
0,1,2,3,4,5,6,7 이런식이면 3,4를 가져오면 되는 것이였다.
이는 /2를 하고 거기서 -1을 하고 해서 2개를 가져오면 된다고 생각했다.
그래서 우선 홀수와 짝수를 구분짓기 위해
if (s.length() % 2 == 0){
짝수
}else{
홀수
}
이런식으로 나누었다.
그 후 짝수에서 나와야 하는 값
answer += s.charAt(s.length() / 2 - 1);
answer += s.charAt(s.length() / 2); //짝수에서의 값
answer += s.charAt(s.length() / 2); //홀수에서의 값
이렇게 값들을 넣어주었다.
charAt의 경우 문자열을 한 글자씩 쪼개 char타입으로 변환해주는 기능이다.
toCharArray() 메소드에 비해 처리속도가 내부적으로 빨라 문자열을 나눌 때 charAt() 메소드를 주로 사용한다.
Step2. 문제풀이 코드
class Solution {
public String solution(String s) {
String answer = "";
if (s.length() % 2 == 0) { //짝수일 경우
answer += s.charAt(s.length() / 2 - 1);
answer += s.charAt(s.length() / 2);
} else {
answer += s.charAt(s.length() / 2); //홀수일경우
}
return answer;
}
}
이렇게 해결은 했지만 하나의 문제가 생겼었다.
내가 처음 생각한 코드가
public class Main {
public static void main(String[] args) {
String s = "";
String answer = "";
if (s.length() % 2 == 0) { //짝수일 경우
answer += s.charAt(s.length() / 2 - 1);
answer += s.charAt(s.length() / 2);
} else {
answer += s.charAt(s.length() / 2 ); //홀수일경우
}
System.out.printf(answer);
}
}
이러한 코드였는데 어차피 똑같으니 문제는 없다고 생각했다.
근데 안되는 점들이 많았다.
Step3. 다른 사람의 풀이 코드
class StringExercise{
String getMiddle(String word){
return word.substring((word.length()-1) / 2, word.length()/2 + 1);
}
// 아래는 테스트로 출력해 보기 위한 코드입니다.
public static void main(String[] args){
StringExercise se = new StringExercise();
System.out.println(se.getMiddle("power"));
}
}
테스트를 위한 코드까지 없다면
class StringExercise{
String getMiddle(String word){
return word.substring((word.length()-1) / 2, word.length()/2 + 1);
}
너무나 간단하게 풀리는 문제였다,,,
근데 substring에 대해서도 잘 이해를 하지 못하고
저 계산식에서도 조금 더 생각해 볼 필요가 있겠다.
세상에 똑똑한 사람은 너무도 많다,,,
너무 배운대로 그대로 써먹는 거 보다는 더 좋은 방식이 있는지 생각하는 습관을 들여야겠다.
'Java > 알고리즘' 카테고리의 다른 글
[프로그래머스/알고리즘] 문자열을 정수로 바꾸기 (자바/Java) (0) | 2022.11.18 |
---|---|
[프로그래머스/알고리즘] 두 정수 사이의 합 (자바/Java) (0) | 2022.11.18 |
[프로그래머스/알고리즘] 짝수와 홀수 (자바/Java) (0) | 2022.11.18 |
[프로그래머스/알고리즘] 직사각형 별찍기 (자바/Java) (0) | 2022.11.18 |
[백준/알고리즘] 11660 - 구간 합 구하기5 (자바/Java) (0) | 2022.11.12 |
댓글