Hayden's Archive

[알고리즘] 백준 2675번 : 문자열 반복 / 1157번 : 단어 공부 / 2908번 : 상수 / 5622번 : 다이얼 본문

Algorithm

[알고리즘] 백준 2675번 : 문자열 반복 / 1157번 : 단어 공부 / 2908번 : 상수 / 5622번 : 다이얼

_hayden 2020. 6. 11. 15:36

알고리즘 문제 출처 : https://www.acmicpc.net/problem/2675

 

2675번: 문자열 반복

문제 문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면

www.acmicpc.net

 

내가 작성한 코드

거의 처음 써보는 3차원 배열. 테스트 케이스의 숫자를 받고 또 그 안으로 들어가서 각각의 횟수와 문자열을 받고 그 횟수에 맞게 문자열을 순차적으로 반복하다 보니 3차원 배열까지 가게 되었다. 문자열에서 순차적으로 인덱스에 접근하기 위해 String 클래스의 charAt() 메소드를 활용하였다.

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int t = sc.nextInt();
		for(int i=0; i<t; i++) {
			int r = sc.nextInt();
			String s = sc.next();
			for(int j=0; j<s.length(); j++) {
				for(int k=0; k<r; k++) {
					System.out.print(s.charAt(j));
				}
			}
			System.out.println();
		}
	}
}

 


알고리즘 문제 출처 : https://www.acmicpc.net/problem/1157

 

1157번: 단어 공부

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

www.acmicpc.net

 

내가 작성한 코드

문자열을 대문자로 바꿔서 char형 배열로 변환하고 알파벳 대문자의 아스키코드 값이 65~90인 것을 감안하여 65를 빼서 해당되는 값을 check 배열에 1씩 증가시킨다. 그 뒤 반복문을 통해 최대값이 있는 위치를 찾고, 반복문을 한번 더 돌려서 최대값이 여러 개일 경우에는 ?를 출력할 수 있도록 ?를 print에 저장한다.

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		//대문자 65~90
		int[] check = new int[26];
		int max = 0;
		int index = 0;
		Scanner sc = new Scanner(System.in);
		String str = sc.next();
		char[] temp = str.toUpperCase().toCharArray();
		for(int i=0; i<temp.length; i++) {
			check[((int)temp[i])-65] += 1;
		}
		for(int i=0; i<26; i++) {
			if(max < check[i]) {
				max = check[i];
				index = i;
			}
		}
		char print = (char)(index+65);
		for(int i=0; i<26; i++) {
			if(check[i] == max) {
				if(index!=i) print = '?';
			}
		}
		System.out.println(print);
	}
}

 


알고리즘 문제 출처 : https://www.acmicpc.net/problem/2908

 

2908번: 상수

문제 상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 ��

www.acmicpc.net

 

내가 작성한 코드

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String strNum1 = sc.next();
		String strNum2 = sc.next();
		StringBuilder sb1 = new StringBuilder(strNum1);
		StringBuilder sb2 = new StringBuilder(strNum2);
		int num1 = Integer.parseInt(sb1.reverse().toString());
		int num2 = Integer.parseInt(sb2.reverse().toString());
		System.out.println(Math.max(num1, num2));
	}
}

 


알고리즘 문제 출처 : https://www.acmicpc.net/problem/5622

 

5622번: 다이얼

문제 상근이의 할머니는 아래 그림과 같이 오래된 다이얼 전화기를 사용한다. 전화를 걸고 싶은 번호가 있다면, 숫자를 하나를 누른 다음에 금속 핀이 있는 곳 까지 시계방향으로 돌려야 한다. �

www.acmicpc.net

 

내가 작성한 코드

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String str = sc.next();
		int time = 0;
		String[] alphabet = {"","","ABC","DEF","GHI","JKL","MNO","PQRS","TUV","WXYZ"};
		for(int i=0; i<str.length(); i++) {
			for(int j=0; j<alphabet.length; j++) {
				if(alphabet[j].contains(str.substring(i, i+1))) {
					time += j+1;
				}
			}
		}
		System.out.println(time);
	}
}