Algorithms/프로그래머스

[프로그래머스] '배열 뒤집기' - Java

LEFT 2023. 4. 17. 13:35

<문제 제시>

<문제설명>
정수가 들어 있는 배열 num_list가 매개변수로 주어집니다. num_list의 원소의 순서를 거꾸로 뒤집은 배열을 return하도록 solution 함수를 완성해주세요.

<예시 입출력>


<문제 해결 과정>

배열의 위치를 바꾸는 문제이다.

좌측변수와 우측변수를 두고 그 인덱스를 증가, 감소시켜가며 대칭되는 구조의 배열을 변경해나가면 되는 문제이다.

temp를 두어 값이 중간에 삭제되지 않도록 하였다.

for(int i = 0 ; i < num_list.length / 2; i++) {
    temp = num_list[lt];
    num_list[lt] = num_list[rt];
    num_list[rt] = temp;

    lt++;
    rt--;

    if(lt == rt) break;
}

만약 홀수길이의 배열이어서 lt와 rt의 길이가 같아진다면 break를 하여 그 값은 변경할 필요가 없었다.

이번에는 배열 입력을 직접 입력받아 처리하고자 하였다.

(,) 쉼표로 구분하여 문자열로 입력받고 이를 StringTokenizer()를 통해 분리하고자 하였다.

st = new StringTokenizer(array, ",");

StringTokenizer()의 인자로 (,)쉼표를 입력하고, 대상은 입력받은 문자열로 하였다.

그리고 ArrayList에 넣어가며 StringTokenizer의 메서드인 hasMoreTokens()를 통해 더이상 입력할 배열이 없는지를

검사하였다.


<전체코드>

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.StringTokenizer;

public class reverse_array {
	
	public static int[] solution(int[] num_list) {
        int[] answer = new int[num_list.length];
        
        int lt = 0; int rt = num_list.length-1;
        int temp = 0;
        
        for(int i = 0 ; i < num_list.length / 2; i++) {
        	temp = num_list[lt];
        	num_list[lt] = num_list[rt];
        	num_list[rt] = temp;
        	
        	lt++;
        	rt--;
        	
        	if(lt == rt) break;
        }
        
        for(int i = 0; i < num_list.length; i++) {
        	answer[i] = num_list[i];
        }
        	
        return answer;
    }
	
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st; 
		
		System.out.print("배열 입력(쉼표로 구분하여 입력해주세요) = ");
		String array = br.readLine();
		List<Integer> num_list = new ArrayList<>();
		
		st = new StringTokenizer(array, ",");
		
		int i = 0;
		while(st.hasMoreTokens()) {
			num_list.add(i, Integer.parseInt(st.nextToken())); 
			i++;
		}
		
		int[] connect = new int[num_list.size()];
		
		for(int j = 0; j < num_list.size(); j++) {
			connect[j] = num_list.get(j);
		}
		
		System.out.println(Arrays.toString(solution(connect)));
	}
}

lt와 rt라는 변수를 두어 배열을 뒤집는 과정은 어렵지 않았지만

자체적으로 입력방식을 변경하여 배열을 직접 입력 후 데이터로 받아오는 과정이 어렵게 느껴졌다.


문제링크)
https://school.programmers.co.kr/learn/courses/30/lessons/120821

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr