https://www.acmicpc.net/problem/10809
10809번: 알파벳 찾기
각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출
www.acmicpc.net
💡주의 사항
중복된 알파벳이 있다면 처음 등장하는 위치를 신경쓰면 된다.
테스트 케이스 baekjoon의 o도 처음 등장하는 인덱스(5)만 저장된 것을 볼 수 있다.
🗒 풀이
java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException {
int[] alphabet = new int[26];
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
Arrays.fill(alphabet, -1);
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (alphabet[ch - 97] == -1) {
alphabet[ch - 97] = i;
}
}
for (int a: alphabet) {
System.out.print(a + " ");
}
}
}
알파벳을 저장할 26개의 정수형 배열을 생성한다.
Arrays.fill(alphabet, -1)로 알파벳 배열을 -1로 초기화한다.
for문을 돌면서 문자열 s의 각 인덱스에 해당하는 문자를 받고(charAt()) 일치하는 곳의 자리 수를 저장해준다. 97을 빼는 이유는 소문자 'a'의 아스키 코드값이 97이고, 알파벳 배열의 인덱스는 0부터 시작이므로 이를 맞춰주기 위함이다.
alphabet 배열이 -1 인 것은 처음 등장했다는 의미이므로, 일치하는 알파벳 배열의 자릿수가 -1 이라면 자릿값을 저장해준다.
python
s = input()
alphabet = [-1] * 26
for i in range(len(s)):
ch = ord(s[i])
if alphabet[ch - 97] == -1:
alphabet[ch - 97] = i
for i in alphabet:
print(i, end=' ')
파이썬에서는 charAt() 함수가 없다.
대신 ord(c) 함수를 사용하는데, 파라미터 c의 유니코드 정수값을 반환해준다.
만약, 정수(int)값을 character로 반환하고 싶을 때는 chr(i)를 사용한다.
매커니즘은 java 코드와 동일하다.
'알고리즘' 카테고리의 다른 글
[백준] 10869번: 사칙연산(java, python) (0) | 2022.07.14 |
---|---|
[백준] 10818번: 최소, 최대 (java, python) (0) | 2022.07.14 |
[백준] 10171번: 고양이 (java, python) (0) | 2022.07.12 |
[백준] 8958번: OX퀴즈 (java, python) (0) | 2022.07.11 |
[백준] 3052번: 나머지(java, python) (0) | 2022.07.11 |