이번주부터 알고리즘 주간이라 알고리즘 문제 풀이를 했다.
프로그래머스 문제풀이 git repo
Array.sort() : 배열을 인자로 전달하면 오름차순으로 정렬된다.
sort() 함수 내부에서 변수의 순서를 변경해주기 때문에 리턴 값을 다른 변수에 할당할 필요가 없다.❤️ 예시코드
int[] arr = {1,5,3,8,6,7,0};
Arrays.sort(arr);
System.out.println("오름차순 : "+Arrays.toString(arr));
📃 실행결과
오름차순 : [0, 1, 3, 5, 6, 7, 8]
Arrays.sort(배열명, Collections.reversOrder()) : sort() 함수 인자에 파라미터로 Collections.reverseOrder()를 전달해 줘야한다.
❤️ 예시코드
<// 내림차순 정렬 1
Integer[] arr = {1,5,3,8,6,7,0};
Arrays.sort(arr, Collections.reverseOrder());
System.out.println("내림차순 : "+Arrays.toString(arr));
// 내림차순 정렬 2
// int 배열을 Integer 배열로 변경한 뒤 Collections.reversOrder() 사용
int arr2[] = {1,5,3,8,6,7,0};
Integer[] tmp = Arrays.stream(arr2).boxed().toArray(Integer[]::new);
Arrays.sort(tmp, Collections.reverseOrder());
System.out.println(Arrays.toString(tmp));
//내림차순 3
//int 배열에 -1 곱해서 저장후 sort 한 뒤 -1 곱하여 출력
int[] arr3 = {-1,-5,-3,-8,-6,-7,-0};
Arrays.sort(arr3);
System.out.println(Arrays.toString(arr3));
for(int i = 0; i < arr3.length; i++){
arr3[i] = -arr3[i];
}
System.out.println(Arrays.toString(arr3));
📃 실행결과
내림차순 : [8, 7, 6, 5, 3, 1, 0]
[8, 7, 6, 5, 3, 1, 0]
[-8, -7, -6, -5, -3, -1, 0]
[8, 7, 6, 5, 3, 1, 0]
문자열을 정수로 바꾸기
❤️문제
문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요.
📝풀이
<//풀이
class Solution {
public int solution(String s) {
int answer = 0;
// System.out.println(Integer.parsInt());
return Integer.parseInt(s);
}
}
👍새로 알게 된 점
- Integer.parseInt() 를 사용하면 부호도 변환 되는 건지 몰랐는데 함께 변환 되었다.
아주 코드가 간단하게 해결 되었따.
📝다른 풀이
//다른 풀이
class Solution {
public int solution(String s) {
boolean sign = true;
int result = 0;
//str.charAt(0) 문자열 가장 첫번째 글자 부호 or 숫자인지 확인
if(str.charAt(0) == '-'){ // 음수라면 sign 은 false
sign = false;
} else if (str.charAt(0) != '+') { // 음수도 아니고 양수도 아니라면 '0' 을 빼줘서 숫자로 만들어주기(아스키 코드 이용)
result = str.charAt(0) - '0';
}
for (int i = 1; i < str.length(); i++) {//string index 0 번째는 부호체크를 했기 때문에 1부터 시작
char ch = str.charAt(i);
result = result * 10 + (ch - '0');
}
return sign ? result : -result;
}
}
👍새로 알게 된 점
- 아스키 코드를 사용하여 문자 → 숫자로 변환
- 문자('0'(48)~'9'(57)) 이기 때문에 문자타입의 숫자를 숫자로 변환하기 위해서는 '0' 을 빼주면 된다.
- 'A' : 65 / 'a' : 97 (32 차이)
정수 제곱근 판별
❤️문제
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고,
n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
📝풀이
//풀이
class Solution {
public long solution(long n) {
long answer = 0;
long square = (long) Math.sqrt(n); //제곱근 구하기
answer = (square * square) == n ? (square+1)*(square+1) : -1;
return answer;
}
}
📝다른 풀이
//다른 풀이
class Solution {
public long solution(long n) {
if (Math.pow((int)Math.sqrt(n), 2) == n) {
return (long) Math.pow(Math.sqrt(n) + 1, 2);
}
return -1;
}
}
👍새로 알게 된 점
- Math.sqrt(), Math.pow() 메서드
- 두 메서드를 사용해서 코드를 엄청 간결하게 줄였다.
Math.sqrt() : 주어진 숫자의 제곱근을 계산
double result = Math.sqrt(숫자);
Math.pow() : 주어진 밑의 거듭제곱을 계산
double result = Math.pow(밑, 지수);
public static void main(String args[]) {
double number = 25.0;
double squareRoot = Math.sqrt(number);
System.out.println("제곱근: " + squareRoot);
double result = Math.pow(5, 3);
System.out.println("제곱: " + result);
}
📃 실행결과
제곱근: 5.0
제곱: 125.0