본문 바로가기
코딩 테스트

#코딩테스트하면서 알게 된 부분들 (2025.05.02)

by duhwan98 2025. 5. 2.

1. 약수의 개수와 덧셈

left와 right 사이에 정수 들중 약수의 갯수가 짝수면 더하고 홀수면 빼는 문제입니다.
  • 약수를 구할 때 for문 반복을 Math.sqrt(N)로 지정한다. 
class Solution {
    public int solution(int left, int right) {
        int answer = 0;

        for (int i = left; i <= right; i++) {
            int count = 0;

            for (int a = 1; a <= Math.sqrt(i); a++) {
                if (i % a == 0) {
                    if (a == i / a) { // 제곱수일 때
                        count += 1; 
                    } else {		// 일반 약수 일때
                        count += 2;
                    }
                }
            }
			// 약수갯수가 짝수 일 경우 + 홀수면 -
            if (count % 2 == 0) {
                answer += i;
            } else {
                answer -= i;
            }
        }

        return answer;
    }
}

 

다른분들 코드를 찾아보니 위에 제곱수인 경우 약수 갯수가 홀수인점을 이용하여 코드를 작성하신분들도 있었다.
class Solution {
    public int solution(int left, int right) {
        int answer = 0;

        for (int i=left;i<=right;i++) {
            //제곱수인 경우 약수의 개수가 홀수
            if (i % Math.sqrt(i) == 0) {
                answer -= i;
            }
            //제곱수가 아닌 경우 약수의 개수가 짝수
            else {
                answer += i;
            }
        }
        return answer;
    }
}

2. 문자열 내림차순으로 배치하기

문자열을 내림차순으로 하는 문제였는데 String 자체를 오름차순 할 수 없기에
String -> Char[] 배열로 바꿔 문자들을 배치하는 방식으로 푸는 문제이다.
import java.util.Arrays;
class Solution {
    public String solution(String s) {
        char[] c = s.toCharArray();	// 정렬을 위한 Char 배열 생성
        Arrays.sort(c); //오름차순 정렬
       	// StringBuilder를 사용하기 위해 char -> String으로 바꿔서 넣어주고
	// 내림차순 후 StringBuilder를 .toString으로 String 타입으로 변환해줌
        String answer = new StringBuilder(new String(c)).reverse().toString();        
        return answer;
    }
}