Hayden's Archive

[알고리즘] 백준 11654번 : 아스키코드 / 11720번 : 숫자의 합 / 10809번 : 알파벳 찾기 본문

Algorithm

[알고리즘] 백준 11654번 : 아스키코드 / 11720번 : 숫자의 합 / 10809번 : 알파벳 찾기

_hayden 2020. 6. 11. 14:13

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

 

11654번: 아스키 코드

알파벳 소문자, 대문자, 숫자 0-9중 하나가 주어졌을 때, 주어진 글자의 아스키 코드값을 출력하는 프로그램을 작성하시오.

www.acmicpc.net

 

내가 작성한 코드

String으로 입력을 받고 String 클래스의 charAt() 메소드를 활용하여 문자열의 0번째 값을 char형으로 변환시키고 int형으로 캐스팅하면 아스키코드 값을 구할 수 있다.

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String input = sc.next();
		System.out.println((int)input.charAt(0));
	}
}

 


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

 

11720번: 숫자의 합

첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.

www.acmicpc.net

 

내가 작성한 코드

처음에는 모두 int형으로 받아서 문제를 풀려고 했는데 문제를 자세히 읽어보니 예시에 입력되는 숫자로7000000000000000000000000이 있었다. 이건 너무 큰 숫자라서 문자열로 받아야 했다. 문자열로 받은 뒤 String 클래스의 substring() 메소드를 활용하여 한자리씩 잘랐고 int형으로 캐스팅해서 total에 더해갔다.

Scanner를 통해 정수 입력 후 문자열 입력을 받는데 nextInt() 다음에 nextLine()으로 입력을 받으면 오류가 난다. nextInt() 다음에는 next()로 입력을 받아야 오류가 나지 않는다. nextLine()은 한줄을 기준으로 엔터와 함께 입력을 받지만 next()는 띄어쓰기를 기준으로 입력받는다. ( 참고 : https://blog.naver.com/qodhr222/221978050065 )

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int total = 0;
		int n = sc.nextInt();
		String input = sc.next();
		for(int i=0; i<n; i++) {
			total += Integer.parseInt(input.substring(i, i+1));
		}
		System.out.println(total);
	}
}

 


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

 

10809번: 알파벳 찾기

각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출

www.acmicpc.net

 

내가 작성한 코드

먼저 alphabet 배열에 -1을 저장해둔다. 그리고 입력받은 단어를 char 배열로 바꾸고 반복문을 돌려서 char 배열에 있는 요소들의 아스키코드 값을 구해 소문자 a의 아스키코드 값을 빼줘서 alphabet 인덱스값과 대응시켜 i번째 문제를 저장한다. 이 때 주의할 점이 있는데 baekjoon에서 o의 경우 문자가 중복해서 나온다. 가장 처음 나온 인덱스 위치를 출력해야 하므로 boolean 타입의 visited 배열을 따로 둬서 방문 여부를 체크하고, 방문하지 않은 경우에만 alphabet 배열의 요소를 조작할 수 있게끔 한다.

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		boolean[] visited = new boolean[26];
		int[] alphabet = new int[26];
		for(int i=0; i<26; i++) {
			alphabet[i] = -1;
		}
		Scanner sc = new Scanner(System.in);
		String str = sc.next();
		char[] temp = str.toCharArray();
		for(int i=0; i<temp.length; i++) {
			if(visited[((int)temp[i])-97]==false) {
				alphabet[((int)temp[i])-97] = i;
				visited[((int)temp[i])-97]=true;
			}
		}
		for(int i=0; i<26; i++) {
			System.out.print(alphabet[i]+" ");
		}
	}
}