문제
https://www.acmicpc.net/problem/25205
시은이는 종합설계 프로젝트로 오픈월드 액션 고스톱 게임 경로당펑크 2077을 개발하고 있다. 대사를 추가하던 중, 사용자 이름에 따라 '을' 또는 '를' 중 하나를 출력해야 함을 깨달았다. 예를 들어 이름이 도현이라면 도현'을' 이라고 출력해야 하고, 인하라면 인하'를' 이라고 출력해야 한다. 그 기준은 이름 마지막 글자의 받침 존재 여부이다.

사용자는 반드시 한글 음절로만 구성된 이름을 사용한다. 이름의 모든 음절은 위 표의 초성, 중성, 종성을 순서대로 하나씩만 골라 조합하여 만들 수 있다. 예를 들어 음절 인(초성 ㅇ, 중성 ㅣ, 종성 ㄴ), 하(초성 ㅎ, 중성 ㅏ, 종성 없음)는 사용자 이름에 등장할 수 있다. 반대로 짜, 계, 와, 삵은 모두 위 표에 없는 낱자가 포함되어 사용자 이름에 등장하지 않는다.
위 그림과 같은 표준 두벌식 자판에서 사용자 이름을 영문 모드 소문자로 타이핑하여 얻는 문자열을 문자열 s라고 하자. 문자열 s가 주어지면 원래 사용자 이름 마지막 글자에 받침이 존재하는지 판별하는 프로그램을 작성하라.
입력
첫 번째 줄에 문자열 s의 길이를 나타내는 정수 N이 주어진다.
두 번째 줄에 문자열 s가 주어진다.
출력
사용자 이름 마지막 글자에 받침이 있다면 1, 없다면 0을 출력한다.
풀이
브론즈니 껌으로 풀겠지~라고 생각했는데, 아니었다...ㅎㅎ 아직도 부족한 게 많다는 걸 느꼈다.
문제 풀이는 쉬웠는데, 문제는 입력받은 이름 맨 끝에 문자를 어떻게 빼낼 것이었다. 어렵게 생각했다기보다는... [-1] 이걸 써본 적이 없어서(기억이 안나는 걸 수도 있지만) 그래서 검색 없이는 풀 수 없는 문제였다고 생각한다.
n = input()
s = input()
last = s[-1]
jong = ['r', 's', 'e', 'f', 'a', 'q', 't','d', 'w', 'c', 'z', 'x','v','g']
if last in jong:
print(1)
else:
print(0)
코드 자체는 짧고 간결하다. 입력받은 문자열에 마지막 문자가 종성인지만 확인해서 맞다면 1을, 아니라면 0을 출력하면 되는 문제였다.
여기서 생각해내지 못했던 코드는, 'last = s[-1]'과 'if last in jong'이었다. 두번째 if문은 사실 문제를 풀 당시에는 for문으로 값을 돌려서 찾을 생각이었는데 훨씬 쉬운 방법이 있길래 조금 놀랐다. 이걸 바로 알지 못한 내가 조금 바보 같았다..ㅎㅎ
근데 처음에는 input으로 값을 받지 않고 sys.stdin.readline().split()으로 입력을 받고 [-1]을 했는데 안되더라. 아무래도 값을 바로 배열에 넣어버리는 탓에 그런 것 같았다.
배열에만 넣어버리지 않는다면, input으로 하든 sys.stdin.readline().strip()로 하든 상관은 없는 것 같다.
그렇지만, 궁금한 점은 더 있었다. 내가 생각했을때 저렇게 s를 입력받게 된다면... 예를 들어서 'wdsdfdf'를 입력했다고 했을때 이거 하나 전체가 str 상태로 s에 저장된다고 생각했기에 어떤 index값을 넣어도 내 예상에서는 wdsdfdf가 나와야 맞았다.
그러나 [-1]를 했을때 f만 나오길래 어떻게 된 건지 관련으로 좀 알아보았다.
이게 가능한 이유는 string 에 대해 알아야 한다.
string은 문자열 자료형으로, 인덱싱과 슬라이싱이 가능한 자료형이다. 그렇기 때문에 [a]에 원하는 값을 넣어 입력한 문자열에서 해당 값만 찾을 수 있는 것(인덱싱)이고... [시작index:끝index]로 부분만 잘라서 쓸 수도 있는 것(슬라이싱)이다.
어쩌면 기본일 수 있는 내용을 잊고 있었다는 생각에 여러모로 머리가 복잡해지는 하루였지만, 그래도 부족한 점을 알게 되어서 좋았다!
'백준 알고리즘' 카테고리의 다른 글
[python] 백준 1181. 단어 정렬 (0) | 2024.11.25 |
---|---|
[python] 백준 28324. 스케이트 연습 (2) | 2024.11.23 |
[python] 백준 1927. 최소 힙 (2) | 2024.11.16 |
[python] 백준 9461. 파도반 수열 (0) | 2024.11.12 |
[python] 백준 2164. 카드2 (0) | 2024.11.10 |