이번 문제는 아래 링크에서 풀어볼 수 있습니다.
10809번: 알파벳 찾기
각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출
www.acmicpc.net
문제
알파벳 소문자로만 이루어진 단어 S가 주어진다. 각 알파벳이 단어에 몇 개가 포함되어 있는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.
출력
단어에 포함되어 있는 a의 개수, b의 개수, …, z의 개수를 공백으로 구분해서 출력한다.
예제 입력 1
baekjoon
예제 출력 1
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
정답 코드
나의 풀이
파이썬 Ver.
import sys data = sys.stdin.readline().rstrip() def mySolution(data): result = [-1] * 26 for i in range(len(data)): if result[ord(data[i]) - ord("a")] == -1: result[ord(data[i]) - ord("a")] = i return " ".join(map(str, result)) print("mySolution", mySolution(data))
자바스크립트/NodeJS Ver.const fs = require('fs'); const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt'; let input = fs.readFileSync(filePath).toString().trim(); const solution1 = (data) => { let result = Array(26).fill(-1); for (let i in data) { if (result[data[i].charCodeAt() - 'a'.charCodeAt()] === -1) result[data[i].charCodeAt() - 'a'.charCodeAt()] = i; } return result.join(' '); }; console.log('solution1'); console.log(solution1(input));
답안 1 index 메서드 활용
import string import sys data = sys.stdin.readline().rstrip() def answer1(data): print("answer1", end=" ") for c in string.ascii_lowercase: print(data.index(c), end=" ") if c in data else print(-1, end=" ") answer1(data)
답안 2 find 메서드 활용
import string import sys data = sys.stdin.readline().rstrip() def answer2(data): print("\nanswer2", end=" ") for c in string.ascii_lowercase: print(data.find(c), end=" ") answer2(data)
답안 3
const fs = require('fs'); const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt'; let input = fs.readFileSync(filePath).toString().trim(); const solution2 = (data) => { let result = ''; for (let i = 97; i <= 122; i++) result += data.indexOf(String.fromCharCode(i)) + ' '; return result.trim(); }; console.log('solution2'); console.log(solution2(input));
문제 풀이
입력 받은 문자열을 for 반복문으로 탐색하면서 탐색하는 문자가 처음 등장한 위치, 즉 인덱스를 해당 문자의 알파벳 순서에 할당하여 출력하면 되는 문제이다. 나의 경우 -1 26개를 기본값으로 삼는 리스트를 먼저 선언한 뒤 입력 받은 문자열을 for 반복문으로 순회하면서 탐색하는 문자의 알파벳 순서에 해당하는 위치에 -1이 있는 경우 그 위치에 탐색하는 문자열의 인덱스를 삽입하도록 코드를 짰다.
답안 1의 경우 index 메서드를 활용한 풀이다. a부터 z까지 알파벳을 for 반복문으로 순회하면서 탐색하는 문자가 문자열에 존재할 경우 입력 받은 문자열에서 해당 문자의 인덱스가 몇 번인지 출력하고, 없다면 -1을 출력하는 방식이다.
답안 2의 경우 find 메서드를 활용한다. 마찬가지로 a부터 z까지 알파벳을 반복문으로 순회하면서 문자열에서 해당 문자의 위치를 find 메서드로 출력한다. 이때 find 메서드는 문자열에서만 사용하며 해당하는 값이 문자열에 존재하지 않는 경우 자동으로 -1을 반환한다.
함께 보기
[백준] 10809 파이썬 (알파벳 찾기)
for문을 이용하여 a부터 z까지 S에 그 알바벳이 있는지 검사한다.있으면 인덱스를 출력하고없으면 -1을 출력한다.find 함수는 어떤 찾는 문자가 문자열 안에서 첫 번째에 위치한 순서를 숫자로 출
velog.io
'👩💻 Programming > Coding Test 문제 풀이' 카테고리의 다른 글
[Baekjoon] 11655 ROT13(파이썬/자바스크립트/NodeJS) (0) | 2022.12.30 |
---|---|
[Baekjoon] 10820 문자열 분석(파이썬/자바스크립트/NodeJS) (0) | 2022.12.29 |
[Baekjoon] 10808 알파벳 개수(파이썬/자바스크립트/NodeJS) (0) | 2022.12.29 |
[Baekjoon] 1918 후위 표기식(파이썬/자바스크립트/NodeJS) (0) | 2022.12.28 |
[Baekjoon] 1935 후위 표기식 2(파이썬/자바스크립트/NodeJS) (0) | 2022.12.28 |
댓글