Skip to content

Latest commit

 

History

History
182 lines (156 loc) · 5.55 KB

160712.md

File metadata and controls

182 lines (156 loc) · 5.55 KB

알고리즘 문제 풀이

* 기본 알아둘 것 정리 링크

1. 정렬

  • 문제
    • 출처 : 백준 온라인 저지 3047
    • 세 수 A, B, C가 주어진다. A는 B보다 작고, B는 C보다 작다.
    • 세 수 A, B, C가 주어졌을 때, 입력에서 주어진 순서대로 출력하는 프로그램을 작성하시오.
  • 입력
    • 첫째 줄에 세 숫자 A, B, C가 주어진다. 하지만, 순서는 A, B, C가 아닐 수도 있다. 세 숫자는 100보다 작거나 같은 자연수이다. 둘째 줄에는 A, B, C로 이루어진 세 글자가 주어지며, 이 순서대로 출력하면 된다.
  • 출력
    • 예제 입력
1 5 3
ABC
  • 예제 출력
1 3 5
  • 풀이
import java.util.*;

public class Main {  
  public static void main(String[] args) {
      int[] nums = new int[3];
      
      Scanner s = new Scanner(System.in);
      for(int i=0; i<3; i++) {
          nums[i] = s.nextInt();
      }
      
      int tmp = 0;
      for(int i=0; i<nums.length; i++) {
          for(int j=0; j<nums.length; j++) {
              if(nums[i] < nums[j]) {
                  tmp = nums[i];
                  nums[i] = nums[j];
                  nums[j] = tmp;
              }
          }
      }
      
      char[] chs = new char[3];
      chs = s.next().toCharArray();
      for(int i=0; i<chs.length; i++) {
          System.out.print(nums[chs[i] - 'A'] + " ");
      }
      
  }
}

2. 문자열 처리

  • 문제
    • 출처 : 백준 온라인 저지 10808
    • 알파벳 소문자로만 이루어진 단어 S가 주어진다. 이 때, 각 알파벳이 단어에 몇 개가 포함되어 있는지 구하는 프로그램을 작성하시오.
  • 입력
    • 첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.
  • 출력
    • 단어에 포함되어 있는 a의 개수, b의 개수, …, z의 개수를 공백으로 구분해서 출력한다.
baekjoon
  • 예제 출력
1 1 0 0 1 0 0 0 0 1 1 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0
  • 풀이
import java.util.*;
 
public class Main {  
  public static void main(String[] args) {
      Scanner s = new Scanner(System.in);
       
      int[] counts = new int['z' - 'a' + 1];
      char[] inputs = s.next().toCharArray();
       
      for(int i=0; i<inputs.length; i++) {
          counts[inputs[i] - 'a']++;
      }
       
      for(int i=0; i<counts.length; i++) {
          System.out.print(counts[i] + " ");
      }
  }
}

3. 문자열 처리 (숫자 역순 처리)

  • 문제
    • 출처 : 백준 온라인 저지 2908
    • 상수는 수를 다른사람과 다르게 거꾸로 읽는다. 예를 들어, 734과 893을 칠판에 적었다면, 상수는 이 수를 437과 398로 읽는다. 따라서, 상수는 두 수중 큰 수인 437을 큰 수라고 말할 것이다.
    • 두 수가 주어졌을 때, 상수의 대답을 출력하는 프로그램을 작성하시오.
  • 입력
    • 첫째 줄에 칠판에 적은 두 수 A와 B가 주어진다. 두 수는 같지 않으며, 0이 포함되어 있지 않다.
  • 출력
    • 첫째 줄에 상수의 대답을 출력한다.
734 893
  • 예제 출력
437
  • 풀이
import java.util.*;
 
public class Main {  
  public static void main(String[] args) {
      Scanner s = new Scanner(System.in);
       
      int a = s.nextInt();
      int b = s.nextInt();
       
      int reverseA = reverse(a);
      int reverseB = reverse(b);
       
      System.out.print(reverseA > reverseB ? reverseA : reverseB);
  }
   
  public static int reverse(int n) {
      int reverse = 0;
      while(n != 0) {
          reverse *= 10;
          reverse += (n % 10);
          n = n / 10;
      }
      return reverse;
  }
}

4. 문자열 처리 (카이사르 암호화 된 단어 복호화)

  • 문제
    • 출처 : 백준 온라인 저지 5598
    • 26개의 대문자 알파벳으로 이루어진 단어를 카이사르 암호 형식으로 3문자를 옮겨 겹치지 않게 나열하여 얻은 카이사르 단어가 있습니다. 이 카이사르 단어를 원래 단어로 돌려놓는 프로그램을 작성하세요.
    • 예를 들어서, 이 방법대로 단어 'JOI'를 카이사르 단어 형식으로 변환한다면 'MRL'을 얻을 수 있고, 앞의 예와 같은 방법으로 얻은 카이사르 단어 'FURDWLD'를 원래 단어로 고치면 'CROATIA'가 됩니다.
  • 입력
    • 입력은 한 줄로 이루어져 있으며, 그 한 줄엔 대문자 알파벳으로 구성된 단어가 1개 있습니다. 입력받는 단어는 최대 1000자 이하입니다.
  • 출력
    • 출력은 입력받은 카이사르 단어를 원래 단어로 고친 걸 출력하시면 됩니다.
MRL
  • 예제 출력
JOI
  • 풀이
import java.util.*;
 
public class Main {  
  public static void main(String[] args) {
      Scanner s = new Scanner(System.in);
       
      char[] inputs = s.next().toCharArray();
       
      for(int i=0; i<inputs.length; i++) {
          char translateChar = (char) (inputs[i] - 3);
          if(translateChar > 'Z') {
              System.out.print((char) (translateChar - 26));
          }
          if(translateChar < 'A') {
              System.out.print((char) (translateChar + 26));
          }
          else {
              System.out.print(translateChar);    
          }
      }
  }
}