728x90
반응형
SMALL

문제 설명

이 문제에서 두 정수 배열의 대소관계를 다음과 같이 정의합니다.

  • 두 배열의 길이가 다르다면, 배열의 길이가 긴 쪽이 더 큽니다.
  • 배열의 길이가 같다면 각 배열에 있는 모든 원소의 합을 비교하여 다르다면 더 큰 쪽이 크고, 같다면 같습니다.

두 정수 배열 arr1과 arr2가 주어질 때, 위에서 정의한 배열의 대소관계에 대하여 arr2가 크다면 -1, arr1이 크다면 1, 두 배열이 같다면 0을 return 하는 solution 함수를 작성해 주세요.


제한사항

  • 1 ≤ arr1의 길이 ≤ 100
  • 1 ≤ arr2의 길이 ≤ 100
  • 1 ≤ arr1의 원소 ≤ 100
  • 1 ≤ arr2의 원소 ≤ 100
  • 문제에서 정의한 배열의 대소관계가 일반적인 프로그래밍 언어에서 정의된 배열의 대소관계와 다를 수 있는 점에 유의해주세요.

입출력 예

arr1 arr2 result

[49, 13] [70, 11, 2] -1
[100, 17, 84, 1] [55, 12, 65, 36] 1
[1, 2, 3, 4, 5] [3, 3, 3, 3, 3] 0

입출력 예 설명

입출력 예 #1

  • 예제 1번에서는 arr1의 길이는 2이고 arr2의 길이는 3으로 arr2의 길이가 더 깁니다. 따라서 arr2가 arr1보다 크므로 -1을 return 합니다.

입출력 예 #2

  • 예제 2번에서는 arr1의 길이과 arr2의 길이가 4로 같습니다. arr1의 모든 원소의 합은 100 + 17 + 84 + 1 = 202이고 arr2의 모든 원소의 합은 55 + 12 + 65 + 36 = 168으로 arr1의 모든 원소의 합이 더 큽니다. 따라서 arr1이 arr2보다 크므로 1을 return 합니다.

입출력 예 #3

  • 예제 3번에서는 arr1의 길이와 arr2의 길이가 5로 같고 각 배열의 모든 원소의 합 또한 15로 같습니다. 따라서 arr1과 arr2가 같으므로 0을 return 합니다.
package Lv0;
/*
이 문제에서 두 정수 배열의 대소관계를 다음과 같이 정의합니다.

두 배열의 길이가 다르다면, 배열의 길이가 긴 쪽이 더 큽니다.
배열의 길이가 같다면 각 배열에 있는 모든 원소의 합을 비교하여 다르다면 더 큰 쪽이 크고, 같다면 같습니다.
두 정수 배열 arr1과 arr2가 주어질 때, 위에서 정의한 배열의 대소관계에 대하여 arr2가 크다면 -1, arr1이 크다면 1, 
두 배열이 같다면 0을 return 하는 solution 함수를 작성해 주세요.
 */
public class H181856 {
	public int solution(int[] arr1, int[] arr2) {
		int answer = 0;

		// 길이 비교
		if (arr1.length > arr2.length) {
			answer = 1;
		} else if (arr1.length < arr2.length) {
			answer = -1;
		} else {
			// 길이가 같은 경우, 원소의 합을 비교
			int sum1 = 0, sum2 = 0;
			for (int num : arr1) {
				sum1 += num;
			}
			for (int num : arr2) {
				sum2 += num;
			}
			if (sum1 > sum2) {
				answer = 1;
			} else if (sum1 < sum2) {
				answer = -1;
			} else {
				answer = 0;
			}
		}
		return answer;
	}
}
728x90
반응형
LIST

'알고리즘 > 프로그래머스 JAVA LV.0' 카테고리의 다른 글

두 수의 합  (0) 2023.05.08
문자 개수 세기  (0) 2023.05.08
다음에 올 숫자  (0) 2023.05.07
코드 처리하기  (0) 2023.05.07
겹치는 선분의 길이  (0) 2023.05.07
728x90
반응형
SMALL

문제 설명

등차수열 혹은 등비수열 common이 매개변수로 주어질 때, 마지막 원소 다음으로 올 숫자를 return 하도록 solution 함수를 완성해보세요.


제한사항

  • 2 < common의 길이 < 1,000
  • 1,000 < common의 원소 < 2,000
    • common의 원소는 모두 정수입니다.
  • 등차수열 혹은 등비수열이 아닌 경우는 없습니다.
  • 등비수열인 경우 공비는 0이 아닌 정수입니다.

입출력 예

common result

[1, 2, 3, 4] 5
[2, 4, 8] 16

입출력 예 설명

입출력 예 #1

  • [1, 2, 3, 4]는 공차가 1인 등차수열이므로 다음에 올 수는 5이다.

입출력 예 #2

  • [2, 4, 8]은 공비가 2인 등비수열이므로 다음에 올 수는 16이다.
package Lv0;
/*
등차수열 혹은 등비수열 common이 매개변수로 주어질 때, 마지막 원소 다음으로 올 숫자를 return 하도록 solution 함수를 완성해보세요.
 */
public class H120924 {
	public int solution(int[] common) {
		int answer = 0;
		int n = common.length;

		// 등차수열인지 확인
		boolean isArithmetic = true;
		int diff = common[1] - common[0];
		for (int i = 2; i < n; i++) {
			if (common[i] - common[i - 1] != diff) {
				isArithmetic = false;
				break;
			}
		}

		if (isArithmetic) {
			answer = common[n - 1] + diff;
		} else {
			// 등비수열인 경우
			int ratio = common[1] / common[0];
			answer = common[n - 1] * ratio;
		}

		return answer;
	}
}
728x90
반응형
LIST

'알고리즘 > 프로그래머스 JAVA LV.0' 카테고리의 다른 글

문자 개수 세기  (0) 2023.05.08
배열 비교하기  (0) 2023.05.08
코드 처리하기  (0) 2023.05.07
겹치는 선분의 길이  (0) 2023.05.07
정수를 나선형으로 배치하기  (0) 2023.05.07
728x90
반응형
SMALL

문제 설명

문자열 code가 주어집니다.

code를 앞에서부터 읽으면서 만약 문자가 "1"이면 mode를 바꿉니다. mode에 따라 code를 읽어가면서 문자열 ret을 만들어냅니다.

mode는 0과 1이 있으며, idx를 0 부터 code의 길이 - 1 까지 1씩 키워나가면서 code[idx]의 값에 따라 다음과 같이 행동합니다.

  • mode가 0일 때
    • code[idx]가 "1"이 아니면 idx가 짝수일 때만 ret의 code[idx]를 추가합니다.
    • code[idx]가 "1"이면 mode를 0에서 1로 바꿉니다.
  • mode가 1일 때
    • code[idx]가 "1"이 아니면 idx가 홀수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다.
    • code[idx]가 "1"이면 mode를 1에서 0으로 바꿉니다.

문자열 code를 통해 만들어진 문자열 ret를 return 하는 solution 함수를 완성해 주세요.

단, 시작할 때 mode는 0이며, return 하려는 ret가 만약 빈 문자열이라면 대신 "EMPTY"를 return 합니다.


제한사항

  • 1 ≤ code의 길이 ≤ 100,000
    • code는 알파벳 소문자 또는 "1"로 이루어진 문자열입니다.

입출력 예

code result

"abc1abc1abc" "acbac"

입출력 예 설명

입출력 예 #1

  • code의 각 인덱스 i에 따라 다음과 같이 mode와 ret가 변합니다.

i code[i] mode ret

0 "a" 0 "a"
1 "b" 0 "a"
2 "c" 0 "ac"
3 "1" 1 "ac"
4 "a" 1 "ac"
5 "b" 1 "acb"
6 "c" 1 "acb"
7 "1" 0 "acb"
8 "a" 0 "acba"
9 "b" 0 "acba"
10 "c" 0 "acbac"

따라서 "acbac"를 return 합니다.

package Lv0;

import java.util.regex.Pattern;

/*
문자열 `code`가 주어집니다.

`code`를 앞에서부터 읽으면서 만약 문자가 "1"이면 `mode`를 바꿉니다. `mode`에 따라 `code`를 읽어가면서 문자열 `ret`을 만들어냅니다.

`mode`는 0과 1이 있으며, `idx`를 0 부터 `code의 길이 - 1` 까지 1씩 키워나가면서 `code[idx]`의 값에 따라 다음과 같이 행동합니다.

- `mode`가 0일 때
    - `code[idx]`가 "1"이 아니면 `idx`가 짝수일 때만 `ret`의 `code[idx]`를 추가합니다.
    - `code[idx]`가 "1"이면 `mode`를 0에서 1로 바꿉니다.
- `mode`가 1일 때
    - `code[idx]`가 "1"이 아니면 `idx`가 홀수일 때만 `ret`의 맨 뒤에 `code[idx]`를 추가합니다.
    - `code[idx]`가 "1"이면 `mode`를 1에서 0으로 바꿉니다.

문자열 `code`를 통해 만들어진 문자열 `ret`를 return 하는 solution 함수를 완성해 주세요.

단, 시작할 때 `mode`는 0이며, return 하려는 `ret`가 만약 빈 문자열이라면 대신 "EMPTY"를 return 합니다.
 */
public class H181932 {
	public String solution(String code) {
		StringBuilder sb = new StringBuilder();
		char[] chars = code.toCharArray();
		int mode = 0;
		for (int i=0; i<chars.length; i++) {
			if (mode == 0) {
				if (chars[i] == '1') {
					mode = 1;
				} else {
					if (i % 2 == 0) {
						sb.append(chars[i]);
					}
				}
			} else if (mode == 1) {
				if (chars[i] == '1') {
					mode = 0;
				} else {
					if (i % 2 == 1) {
						sb.append(chars[i]);
					}
				}
			}
		}
		String str = sb.toString();

		if (str.equals("")) {
			return "EMPTY";
		}
		return str;
	}
}
728x90
반응형
LIST

'알고리즘 > 프로그래머스 JAVA LV.0' 카테고리의 다른 글

배열 비교하기  (0) 2023.05.08
다음에 올 숫자  (0) 2023.05.07
겹치는 선분의 길이  (0) 2023.05.07
정수를 나선형으로 배치하기  (0) 2023.05.07
배열 조각하기  (0) 2023.05.07

+ Recent posts