JAVA를 잡아라!...

JAVA_[Lv.0] #26~28 본문

JAVA/JAVA_연습문제_프로그래머스

JAVA_[Lv.0] #26~28

onivv 2024. 2. 19. 13:46

문제 출처 : 프로그래머스

#26 마지막 두 원소

문제 설명
정수 리스트 num_list가 주어질 때,

마지막 원소가 그전 원소보다 크면 마지막 원소에서 그전 원소를 뺀 값을

마지막 원소가 그전 원소보다 크지 않다면 마지막 원소를 두 배한 값을

추가하여 return하도록 solution 함수를 완성해주세요.


입출력 예

num_list		result
[2, 1, 6]		[2, 1, 6, 5]
[5, 2, 1, 7, 5]		[5, 2, 1, 7, 5, 10]

 

소스코드 풀이

class Solution {
    public int[] solution(int[] num_list) {
        int length = num_list.length;
        // 기존 배열에서 마지막 index에 값 추가를 위해 새로운 배열 생성
		int[] answer = new int[length + 1];
		
		for(int i = 0; i < length; i++) {
			answer[i] = num_list[i];
		}
		int lastValue = num_list[length - 1];
		int beforeValue = num_list[length - 2];
		if(lastValue > beforeValue) {
			answer[length] = lastValue - beforeValue;
		}
		else {
			answer[length] = lastValue * 2;
		}
        
        return answer;
    }
}

 

#27 수 조작하기 1

문제 설명
정수 n과 문자열 control이 주어집니다.

control은 "w", "a", "s", "d"의 4개의 문자로 이루어져 있으며,

control의 앞에서부터 순서대로 문자에 따라 n의 값을 바꿉니다.

"w" : n이 1 커집니다.
"s" : n이 1 작아집니다.
"d" : n이 10 커집니다.
"a" : n이 10 작아집니다.
위 규칙에 따라 n을 바꿨을 때 가장 마지막에 나오는 n의 값을 return 하는 solution 함수를 완성해 주세요.


입출력 예

n	control		result
0	"wsdawsdassw"	-1

 

소스코드 풀이

class Solution {
    public int solution(int n, String control) {
        int answer = n;
		for (int i = 0; i < control.length(); i++) {
			if(control.charAt(i) == 'w') {
				answer += 1;
			}
			else if(control.charAt(i) == 's') {
				answer -= 1;
			}
			else if(control.charAt(i) == 'd') {
				answer += 10;
			}
			else {
				answer -= 10;
			}
		}  
        return answer;
    }
}

 

#28 수 조작하기 2

문제 설명
정수 배열 numLog가 주어집니다.

처음에 numLog[0]에서 부터 시작해 "w", "a", "s", "d"로 이루어진 문자열을 입력으로 받아

순서대로 다음과 같은 조작을 했다고 합시다.

"w" : 수에 1을 더한다.
"s" : 수에 1을 뺀다.
"d" : 수에 10을 더한다.
"a" : 수에 10을 뺀다.


그리고 매번 조작을 할 때마다 결괏값을 기록한 정수 배열이 numLog입니다.

즉, numLog[i]는 numLog[0]로부터 총 i번의 조작을 가한 결과가 저장되어 있습니다.

주어진 정수 배열 numLog에 대해 조작을 위해 입력받은 문자열을 return 하는 solution 함수를 완성해 주세요.


입출력 예

numLog						result
[0, 1, 0, 10, 0, 1, 0, 10, 0, -1, -2, -1]	"wsdawsdassw"

 

소스코드 풀이

class Solution {
    public String solution(int[] numLog) {
        String answer = "";
        for (int i = 0; i < numLog.length - 1; i++) {
			if(numLog[i+1] - numLog[i] == 1) {
				answer += "w";
			}
			else if(numLog[i+1] - numLog[i] == -1) {
				answer += "s";
			}
			else if(numLog[i+1] - numLog[i] == 10) {
				answer += "d";
			}
			else {
				answer += "a";
			}
		}
        return answer;
    }
}

 

오류

처음에 i < numLog.length - 1을 해주지 않아서 조건(numLog[i+1])에서 배열의 길이보다 길어짐