프로그래머스 - 자연수 뒤집어 배열로 만들기 (Level 1)

2023. 12. 25. 01:50코딩테스트 정리(자바)

728x90

1. List를 배열로 변환하는 방법
: for(int i=0;i<answer.length;i++){
            answer[i]=result.get(i).intValue();
        }

-> result.toArray()를 사용하면 Object 타입의 배열로 반환되기 때문에 
int 타입의 배열에 대입할 수 없다
anwer=result.toArray(); (x)

 

public class 자연수_뒤집어_배열로_만들기 { //처음 푼 풀이 - 수식으로 접근
    public int[] solution(long n) {
        List<Long> result=new ArrayList<>(); //long 타입의 동적 배열 생성
        while(n!=0){
            result.add(n%10); //10으로 나눈 나머지= 즉, 1의 자리를 담기
            n/=10; //n을 10으로 나눠서 1의 자리 없애기
        }
        int[] answer=new int[result.size()];
        for(int i=0;i<answer.length;i++){
            answer[i]=result.get(i).intValue(); //리스트를 배열로 하나씩 담기
            // long 타입을 int 타입으로 변환해서 담아야 하므로 intValue() 메소드 사용
        }
        return answer;
    }
}

 

 

2. 문자열로 푸는 풀이

public class 자연수_뒤집어_배열로_만들기 {
    public int[] solution(long n) {
        String str = Long.toString(n); //1, 문자열로 변환
        //2. StringBuilder를 사용해 문자열 뒤집기
        String reversed = new StringBuilder(str).reverse().toString(); 
        char[] arr = reversed.toCharArray(); //3. 문자열을 문자배열로 변환
        int[] result = new int[arr.length]; //4. 정수형 배열 생성
        for (int i = 0; i < result.length; i++) { 5. 문자배열을 정수형 배열에 하나씩 담기
            result[i] = arr[i] - '0'; //문자를 정수로 바꾸는 방법
        }
        return result;
    }
}

 

 

* 문자열 정리

1. 문자열 내 문자를 가져오는 방법

:

  • String.charAt(int index)
    • 장점: 문자 하나를 쉽게 가져올 수 있다
    • 단점: 메서드 호출에 따른 오버헤드가 있다
    • 주로 특정 몇 개의 문자만 필요할 때 사용한다
  • String.toCharArray()
    • 장점: 모든 문자를 한 번에 가져올 수 있다
    • 단점: 문자열 길이에 해당하는 메모리를 필요로 한다
    • 주로 문자열의 모든 문자가 필요할 때 사용한다

2. 문자를 정수로 바꾸는 방법

: 예를 들어 9에 해당하는 문자를 정수값으로 바꾸고 싶다면 

-> '0'을 빼주면 된다. 

char digit ='9';
int digitToint=digit-'0';

 

 

3. 영문 소문자를 대문자로 바꾸는 방법

: 아스키코드에서 대문자는 65~90의 값을 가지고

소문자는 97~122의 값을 가진다.

  • 값을 외울 필요는 없고 대문자가 값이 더 작다는 걸 기억하자.
  • 소문자와 대문자 사이에는 'a' - 'A' 만큼의 차이가 난다.
  • 문자끼리 연산을 하면 int형으로 자동 형변환이 일어나므로 
    char로 강제 형변환을 시켜야 한다.

 

char lower='e';
char upper= (char) (lower - ('a'-'A'));

 

대문자를 소문자로 바꾸기

char upper='E';
char lower= (char) (upper + ('a'-'A'));

 

내장 라이브러리를 사용해서도 쉽게 할 수 있다.

char lower='e';
char upper= Character.toUpperCase(lower);
char upper='e';
char lower= Character.tolowerCase(upper);

 

 

4. 문자를 이어붙이거나 빼는 등 문자열 수정하고 싶을 때

:  StringBuilder를 사용한다

 

자주 사용하는 메서드

  • StringBuilder.toString() : 지금까지 구성한 문자열을 String 형식으로 반환
  • StringBuilder.append(char c) : 문자 c를 문자열 끝에 이어붙인다.
  • StringBuilder.length() : 문자열 길이 반환
  • StringBuilder.reverse() : 문자열을 뒤집는다.
StringBuilder sb=new StringBuilder(); // StringBuilder 생성하기

// 'a'부터 'z'까지 이어붙이는 예제
for(char c='a'; c<'z'; c++){
	sb.append(c);
}

String str=sb.toString(); // String 타입으로 반환
728x90