오늘의 코딩 테스트

오늘의 코딩 테스트(Java : 문자열 뒤집기, SQL : 첫 번째 열만 조회) 오답 노트

oceanflow 2025. 1. 8. 21:01

문자열 뒤집기

문자열 my_string이 매개변수로 주어집니다. my_string을 거꾸로 뒤집은 문자열을 return하도록 solution 함수를 완성해주세요.

class Solution {
    public String solution(String my_string) {
        
        String answer = "";
        int myStrLen = my_string.length();
        String[] arr = my_string.split("");
        
        for(int i = myStrLen - 1; i >= 0 ; i--)
            answer += arr[i];
        
        return answer;
    }
}

 

문자열을 한 글자씩 분리하고 싶었으나 방법을 알지 못하였고 검색을 통해 split() 메소드를 활용하게 되었습니다.

분리된 문자들을 배열에 저장한 후 for문으로 역순 저장을 구현했습니다.

하지만 다른 풀이를 보니 더 효율적인 방법들이 있었습니다:

  1. charAt() 메소드로 직접 문자열의 각 문자에 접근
  2. StringBuilder의 reverse() 메소드를 사용한 문자열 뒤집기

1.

class Solution {
    public String solution(String my_string) {
        
        String answer = "";
        
        for(int i = my_string.length() - 1; i >= 0 ; i--)
            answer+=my_string.charAt(i);
        
        return answer;
    }
}

 

2.

class Solution {
    public String solution(String myString) {
        return new StringBuilder(myString).reverse().toString();
    }
}

 

이를 통해 더 간단하고 효율적인 코드 작성 방법을 배웠습니다.

그리고 추가적으로 

<문자열 길이를 구할떄는 'length()' 메소드를 사용하고

컬렉션 크기를 구할때는 'size()' 메소드를 사용한다>는 점과

String answer;	//answer 변수가 초기화되지 않음
int myStrLen = my_string.length;	//length는 메소드여야 함 (.length())
String[myStrLen] arr = my_string.split("");	//배열 선언 문법이 잘못됨
 for(int i = myStrLen - 1; i >= 0 ; i--)
            answer = arr[i];				//answer에 값을 누적하지 않고 덮어씌움

 

이 부분에 실수가 있어 수정하였다.

문제점은 다음과 같다.

문자열 길이를 얻을 때는 length()를 사용해야 한다.
배열 선언은 String[] arr와 같이 해야 한다.
answer 변수를 빈 문자열로 초기화해야 한다.
문자열을 거꾸로 만들기 위해서는 += 연산자로 문자를 누적해야 한다.

 

 

 

첫 번째 열만 조회

동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 SQL 문을 작성해주세요.

ANIMAL_INS 테이블명

구조 : ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는

각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냄

 

SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1

 

이 역시 배우지 않았던 부분이라 검색을 통해 LIMIT이라는 것을 알아냈다.
LIMIT은 결과에서 몇개의 행을 반환할 것인지 제한하는 구문이다.
LIMIT 구문은 SELECT 명령의 마지막에 지정하며 WHERE이나 ORDER BY 구문의 뒤에 위치한다.
LIMIT 뒤의 숫자는 인덱스가 아닌 개수를 의미한다.
LIMIT OFFSET 은 어디서 부터 몇개의 행을 반환할지에 대해 제한할 수 있다.
LIMIT 뒤엔 출력 개수가 들어가고, OFFSET 뒤엔 시작 인덱스가 들어간다.
OFFSET은 0부터 시작한다.
OFFSET을 생략할 수도 있다.
ex) LIMIT 1, 3