알고리즘

[Java, Python] 10809 알파벳 찾기 - ASCII Code, Char to Int

Garonguri 2022. 1. 20. 00:45
728x90

ㅎㅇ

https://www.acmicpc.net/problem/10809

 

10809번: 알파벳 찾기

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

www.acmicpc.net

잼나는 문제를 풀어보았어용

[Java]

 

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
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class bj10809 {
    static int[] alpha;
    static boolean[] visit;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String S = br.readLine();
        //97(a)-122(z)
        int tmp =0;
        alpha = new int[26];
        for(int i=0;i<26;i++)
            alpha[i] = -1;
        visit = new boolean[26];
        for(int s=0; s<S.length();s++){
            tmp = S.charAt(s) -'0'-49;
            if(!visit[tmp]) {
                alpha[tmp] = s;
                visit[tmp] = true;
            }
        }
        for(int i=0; i<26;i++){
            System.out.print(alpha[i] + " ");
        }
    }
}
cs

수업 할 때는 스캐너를 주로 쓰는데 뭔가 알고리즘 풀 때는 버퍼리더를 쓰고싶은 마음이 든다. 메모리와 시간이 줄어드는 것을 보며

희열을 느끼기 때무니다

 

적당히 입력 받아서 한 글자씩 읽었다

없는 알파벳은 -1이어야 하므로 -1로 초기화를 했고 맨 첫 번째 알파벳 위치를 찾기 위해 방문했는지를 표시하는

boolean type 배열도 하나 만들어서 넣어두었다.

방문 안한 알파벳만 새롭게 넣어두게 하였다. 캐릭터형 타입의 문자를 -'0'를 통해 아스키코드 숫자로 변환시켜 주고

49를 빼서 0부터 시작하게끔 하였다!

끄읕

 

[python]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from sys import stdin
 
= stdin.readline().strip()
 
alpha = [-1]*26
visit = [0]*26
 
for idx, s in enumerate(S):
    tmp = ord(s)-97
    if visit[tmp] ==0:
        alpha[ord(s)-97= idx
        visit[ord(s)-97= 1
 
for a in alpha:
    print(a, end =" ")
cs

문자열은 모다? 파이썬이다

과정은 비슷하므로 설명을 생략하겠당

 

아!!!! 하나 중요한 것이 있다 -> readline()으로 받아올 때는 맨 오른쪽에 개행 문자가 추가되므로 strip() (양쪽 둘다 없앰) rstrip(오른쪽 없앰)으로 혹시 모를 개행들을 제거해주는 작업이 필요하다!

 

배열을 개수 딱 맞춰 선언했기 때문에 불가피하다

 

구럼 끝

728x90