본문 바로가기

Problem Solving/탑코더 알고리즘 트레이닝

2. 전체탐색(암호)

반응형

문제(암호)

TopCoder Security Agency(TSA, 오늘 설립되었어요!)는 새로운 암호화 시스템을 개발했습니다.
이 시스템은 암호화하려고 숫자 리스트를 입력받습니다.

여러분은 TSA의 비밀 정보 수사원입니다. 암호화 과정에서 중요한 부분을 구현하는 것이 여러분의 일입니다.
여러분은 입력 리스트에서 1개의 값을 선택하고 값을 1 증가시킵니다. 이때 리스트 내부의 모든 숫자 곱이
가장 커져야 합니다.

int[] numbers 형태로 숫자 배열이 주어질 때 곱의 최댓값을 리턴하세요. 리턴값이 2^62를 넘는 문제는 나오지 않을 것을 보장합니다.

입력

numbers : 2~50개의 요소가 있는 배열이며 각 요소의 값은 1~1000입니다.

출력

정수를 담고있는 변수

IO Example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Case# 0
numbers=[123]
returns=12
 
# Case# 1
numbers=[132113]
returns=36
 
# Case# 2
numbers=[1000999998997996995]
returns=986074810223904000
 
# Case# 3
numbers=[1111]
returns=2
cs

구현

1차 코드 : 각 배열의 요소마다 +1씩 번갈아 더해주며 모든 값의 곱을 구한다.

구한 곱중 가장 큰 값의 경우를 리턴해준다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class Cryptography2 {
    
    public static void main(String[] args) {
        
        int[] numbers=new int[]{1,2,3};//입력값
        System.out.println(encrypt(numbers));//출력
        
    }
    
    public static long encrypt(int[] numbers){
        long ans = 0;
        long temp = 1;
        
        for(int i = 0; i<numbers.length; i++ ){
            
            temp=1;
            
            forint j = 0; j<numbers.length; j++ ) {
                if( i ==j )
                    temp *= (numbers[j] + 1);//각 요소마다 번갈아가며 1씩 높은값을 곱해줌
                else 
                temp *= numbers[j];//나머지 요소 모두 곱해줌
            }
                ans = Math.max(ans, temp);//최대값을 갱신
            }
        return ans;//가장 큰 곱의 경우 리턴
    }
}
cs


2차 코드 :  배열의값중 가장 작은 값에 +1을 해주고 모든값을 곱하는 것이 가장 큰 수를 만들어냄을 알아냈다. 그래서 배열의 요소를 오름차순으로 정렬하고 가장 작은 최소값을 +1해준후 모든 값을 곱한다.

1
2
3
4
5
6
7
8
9
10
11
public static long encrypt(int[] numbers){
        long temp = 1;
        Arrays.sort(numbers);//먼저 정렬
        numbers[0]++;//가장 작은 최소값을 +1해준다
        
            forint j = 0; j<numbers.length; j++ ) {
                temp *= numbers[j];//모든값을 곱한다
            }
            
        return temp;
    }
cs


반응형

'Problem Solving > 탑코더 알고리즘 트레이닝' 카테고리의 다른 글

2. 전체 탐색(즐거운 파티)  (0) 2019.01.30
1. 시뮬레이션  (0) 2019.01.29