Sunday, October 18, 2015

주사위

 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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import java.util.*;

public class Main {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
  
  Scanner sc = new Scanner(System.in);
  
  int N1 = sc.nextInt();
  int N2 = sc.nextInt();
  int N3 = sc.nextInt();
  
  int Size = N1 * N2 * N3;
  int[] answerArray = new int[Size];
  
  int answerIdx = 0;
  for(int i=1; i<=N1; i++){
   
   for(int j=1; j<=N2; j++){
    
    for(int k=1; k<=N3; k++){
     answerArray[answerIdx++] = i + j + k;
    }
   }
  }
  
  Arrays.sort(answerArray);
  
  int currentNum = answerArray[0];
  int maxNum = answerArray[0];
  int currentCnt = 1;
  int maxCnt = 1;
  
  for(int i=1; i<answerArray.length; i++){
   if(currentNum != answerArray[i]){
    if(maxCnt < currentCnt){
     maxNum = currentNum;
     maxCnt = currentCnt;
    }
    currentNum = answerArray[i];
    currentCnt = 1;
    
   }else{
    currentCnt++;
   }
   
  }
  
  System.out.println(maxNum);

 }


}

수학귀신

 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
29
30
31
32
33
34
35
36
37
import java.util.*;

public class Main {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
  
  Scanner sc = new Scanner(System.in);
  
  int K = sc.nextInt();
  
  long[] zeroCntArray = new long[K+1];
  long[] oneCntArray = new long[K+1];
  
  int i = 0;
  zeroCntArray[i] = 0;
  oneCntArray[i++] = 0;
  
  zeroCntArray[i] = 0;
  oneCntArray[i++] = 1;
  
  if(K >= 2){
   zeroCntArray[i] = 1;
   oneCntArray[i++] = 1;
   
   for(; i<K+1; i++){
    zeroCntArray[i] = zeroCntArray[i-1] + zeroCntArray[i-2];
    oneCntArray[i] = oneCntArray[i-1] + oneCntArray[i-2];
   }
  }
  
  System.out.println(zeroCntArray[K]+" "+oneCntArray[K]);

 }


}

창고다각형

 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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import java.util.*;

public class Main {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
  
  Scanner sc = new Scanner(System.in);
  
  int N = sc.nextInt();
  int[][] inputArray = new int[N][2];
  
  for(int i=0; i<N; i++){
   inputArray[i][0] = sc.nextInt();
   inputArray[i][1] = sc.nextInt();
  }
  
  sort(inputArray);
  
  int maxHeightIndex = 0;
  int maxHeight = inputArray[0][1];
  for(int i=0; i<N; i++){
   
   if(inputArray[i][1] > maxHeight){
    maxHeightIndex = i;
    maxHeight = inputArray[i][1];
   }
   
  }
  
  System.out.println(maxHeightIndex+" "+maxHeight);
  
  int currentHeight = inputArray[0][1];
  for(int i=0;i<maxHeightIndex;i++){
   
  }
  
 }
 
 
 static void sort(int[][] inputArray){
  
  for(int i=0; i<inputArray.length - 1; i++){
   
   for(int j=i; j<inputArray.length - 1; j++){
    
    if(inputArray[j][0] > inputArray[j+1][0]){
     int tempLocation = inputArray[j][1];
     inputArray[j][1] = inputArray[j+1][1];
     inputArray[j+1][1] = tempLocation;
     
     int tempHieght = inputArray[j][0];
     inputArray[j][0] = inputArray[j+1][0];
     inputArray[j+1][0] = tempHieght;
     
    }
   } 
  }

 }

}

Saturday, October 17, 2015

주차요금

 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
29
30
31
32
33
34
35
36
37
38
39
40
import java.util.*;

public class Main {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
  
  Scanner sc = new Scanner(System.in);
  
  int M = sc.nextInt();
  int[] mList = new int[M]; 
  for(int i=0; i<M; i++){
   mList[i] = sc.nextInt();
  }
  
  int total = 0;
  for(int i=0; i<M; i++){
   
   int subTotal = 0;
   if(mList[i] < 10){
    subTotal = 0;
   }else if(mList[i] >= 10 && mList[i] <= 30){
    subTotal = 500;
   }else{
    subTotal = 500 + (((mList[i] - 31)/10) + 1) * 300;
   }
   
   if(subTotal > 50000){
    subTotal = 50000;
   }
   
   total += subTotal;
   
  }
  
  System.out.println(total);
  
 }

}

유의사항

1. 반복적인 System.out.print();를 이용한 출력 안됨, 한줄에 println()을 이용하여 출력할 것.

잃어버린 페이지

 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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import java.util.*;

public class Main {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
  
  Scanner sc = new Scanner(System.in);
  
  int N = sc.nextInt();
  int P = sc.nextInt();
  
  int pageArrayRow = N/4;
  int[][] pageArray = new int[pageArrayRow][4];
  
  int number = 1;
  for(int i=0; i<pageArrayRow; i++){
   pageArray[i][0] = number++;
   pageArray[i][1] = number++;
  }
  
  for(int i=N/4-1; i>=0; i--){
   pageArray[i][2] = number++;
   pageArray[i][3] = number++;
  }
 
  int index = 0;
  if(P > N/2){
   if(P%2 == 0){
    index = Math.abs((P-N/2)/2 - (N/4));
   }else{
    index = Math.abs((P-N/2)/2 - (N/4-1));
   }
   
  }else{
   index = (P-1)/2;
  }
  
  int[] answer = new int[3];
  int answerIndex = 0;
  for(int i=0; i<4; i++){
   if(pageArray[index][i] != P){
     answer[answerIndex++]= pageArray[index][i];
   }
  }
  
  System.out.println(answer[0]+" "+answer[1]+" "+answer[2]);
  
  
 }

}

폭탄돌리기

 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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import java.util.*;

public class Main {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
  
  Scanner sc = new Scanner(System.in);
  
  int K = sc.nextInt();
  int N = sc.nextInt();
  
  int[] timeArray = new int[N];
  char[] answerArray = new char[N];
  
  for(int i=0 ; i<N ; i++){
   timeArray[i] = sc.nextInt();
   String s = sc.next();
   answerArray[i] = s.charAt(0);
  }

  int timeAnswerIdx = 0;
  int timer = 0;
  
  int i = K;
  for(;;){
   
   if(timeAnswerIdx > N-1){
    break;
   }
   
   int currentTime = timeArray[timeAnswerIdx];
   char currentAnswer = answerArray[timeAnswerIdx];
   
   timeAnswerIdx++;
   
   timer += currentTime;
   
   if(timer > 210){
    break;
   }
   
   if(currentAnswer =='T'){
    i++;
   }
   
   if(i == 9){
    i = 1;
   }
   
  }
  
  System.out.println(i);
  
 }

}

할부

 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
29
30
31
import java.util.*;

public class Main {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
  
  Scanner sc = new Scanner(System.in);
  
  int N = sc.nextInt();
  int B = sc.nextInt();
  
  int Quotient = B / (N-1);
  
  int min = 0;
  int max = 0;
  
  if(B % (N-1) == 0){
   min = Quotient-1+B;
   max = Quotient+B;
  }else{
   min = Quotient+B;
   max = Quotient+B;
  }
  

  System.out.println(min+" "+max);
  
 }

}

Friday, October 2, 2015

문자열압축

문제

문자열을 입력 받은 후, 같은 문자가 연속적으로 반복되는 경우 반복 횟수를 ()안에 넣어 문자열의 길이를 줄이는 압축하는 프로그램을 작성하려고 한다.
조건1. 같은 문자가 M번 이상 연속으로 반복된 때만 ()안에 반복 횟수를 넣는다.
조건2. 연속으로 반복되는 문자 뒤에 ()를 넣는다.

입력형식

입력의 첫줄에 M(2≤M≤10)이 들어온다.
그 다음 줄에 알파벳 대문자와 숫자로 구성된 문자열이 입력된다. 문자열의 길이는 100이하이다.

출력형식

압축한 문자열을 출력한다.


 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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import java.util.*;

public class Main {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
  
  Scanner sc = new Scanner(System.in);
  
  int M = sc.nextInt();
  String str = sc.next();
  char[] strArray = str.toCharArray();
  int strArrayLength = strArray.length;
  
  char currentChar = strArray[0];
  
  String currentTempStr = String.valueOf(strArray[0]);
  
  for(int i=1; i<strArrayLength; i++){
   
   if(currentChar == strArray[i]){
    
    currentTempStr = currentTempStr + String.valueOf(strArray[i]);
    
   }else{
    
    if(currentTempStr.length() < M){
     System.out.print(currentTempStr);
     currentChar = strArray[i];
     currentTempStr = String.valueOf(strArray[i]);
    }else{
     System.out.print(currentChar+"("+currentTempStr.length()+")");
     currentChar = strArray[i];
     currentTempStr = String.valueOf(strArray[i]);
    }
    
   }
   
  }
  
  if(currentTempStr.length() < M){
   System.out.print(currentTempStr);
  }else{
   System.out.print(currentChar+"("+currentTempStr.length()+")");
  }
  
 }

}

해킹

문제

해커 선빈이는 서버의 로그를 뒤져본 결과 관리자의 암호를 찾을 수 있는 N개의 단서를 발견했다. 선빈이는 서버의 특성상 단서의 길이는 모두 홀수이고, 암호가 로그에 남으면, 그 암호를 뒤집은 암호도 로그에 있다는 것을 알고 있다. 로그에 남은 단서가 주어질 때, 관리자의 암호를 구하는 프로그램을 작성하여라.

입력형식

첫 번째 줄에는 로그에 남은 단서의 수 N(1≤N≤100)이 주어진다. 두 번째 줄부터 N개의 줄에는 각 단서를 나타내는 문자열이 주어진다. 단서는 영어 소문자로만 이루어져 있으며, 길이는 3 이상 13 이하의 홀수이다.

출력형식

관리자의 암호의 길이와 중간 글자를 출력한다. 답은 유일하다고 가정해도 좋다.

 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
29
30
31
32
33
34
35
36
37
38
39
import java.util.*;

public class Main {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
  
  Scanner sc = new Scanner(System.in);
  int N = sc.nextInt();
  
  String[] strArray = new String[N];
  
  for(int i=0 ; i<N ; i++){
   strArray[i] = sc.next();
  }
  
  String[] strReverseArray = new String[N];
  for(int i=0 ; i<N ; i++){
    strReverseArray[i] = new StringBuilder(strArray[i]).reverse().toString();
  }
  
  int pWLength = 0;
  char midCharacter = '0';
  for(int i=0 ; i<N ; i++){
   for(int j=0; j<N; j++){
    if(strArray[i].equals(strReverseArray[j])){
     pWLength = strArray[i].length();
     int midIdx = pWLength / 2;
     midCharacter = strArray[i].charAt(midIdx);
    }
   }
   
  }
  
  System.out.println(pWLength+" "+midCharacter);
  
 }

}