4. 문자열
문자열
1. 슬라이싱
- 문자열에서 일부를 자를 수 있음.
s[start:end]
→ end는 포함 X
1
2
3
s = "Hello World!"
print(s[0:5]) # Hello
print(s[-6:-1]) # World
예제
문자열에서 첫 번째 단어만 출력하세요.
1
2
s = "Python is powerfil"
print(s[:s.find(' ')]) # Python
2. 문자열 정렬
- 문자열은 정렬하면 리스트가 되며,
sorted()
로 정렬 가능. key나''.join()
조합 가능.
1
2
3
s = "dcba"
print(sorted(s)) # ['a', 'b', 'c', 'd']
print(''.join(sorted(s))) # abcd
예제
문자열을 알파벳 순으로 정렬해 출력하세요.
1
2
s = "openai"
print(''.join(sorted(s))) # 출력: aeinop
3. Counter (문자 수 세기)
- 각 문자/요소의 개수를 딕셔너리 형태로 셈.
from collections import Counter
1
2
3
4
5
from collections import Counter
s = 'banana'
count = Counter(s)
print(count) # Counter({'a': 3, 'n': 2, 'b': 1})
예제
문자열에서 가장 많이 등장한 문자를 출력하세요.
1
2
3
4
5
from collections import Counter
s = "aabbbcc"
count = Counter(s)
print(count.most_common(1)[0][0]) # b
4. 문자열 메서드 (split
, join
, replace
, strip
, lower
, upper
등)
- 문자열을 다룰 수 있는 다양한 내장 함수
1
2
3
s = " Hello Word "
print(s.strip()) # 'Hello World'
print(s.replace(" ", '-')) # "-Hello-World-"
예제
문자열에 있는 모든 공백을 제거하고 출력하세요.
1
2
s = "a b c d e"
print(s.replace(' ', '')) # abcde
5. 아스키 코드 변환 (ord()
, chr()
)
- 문자 ↔ 아스키 코드로 변환
1
2
print(ord('A')) # 65
print(chr('97')) # 'a'
예제
문자열에서 아스키 코드가 가장 큰 문자를 출력하세요.
1
2
s = 'Zebra'
print(max(s, key=lambda x : ord(x))) # r
6. 실전 문제
문제 1. 회문 검증기
📘 문제 설명
문자열이 주어졌을 때,
- 알파벳과 숫자만 남기고 (특수문자, 공백 제거)
- 대소문자를 구분하지 않으며,
이 문자열이 회문(Palindrome) 인지 판별하시오.
회문이란 앞에서 읽으나 뒤에서 읽으나 같은 문자열을 말함. 예:
madam
,racecar
,A man, a plan, a canal: Panama
등
📥 입력 형식
문자열
s
(1 ≤ 문자열 길이 ≤ 1000)알파벳 대소문자, 숫자, 특수문자, 공백 포함 가능
📤 출력 형식
- 회문이면
1
, 아니면0
출력
입력 예시 1
1
A man, a plan, a canal: Panama
출력 예시 1
1
1
해설
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
def is_palindrome(letter:str) -> int:
del_special = (''.join([word for word in map(str, letter) if word.isalnum()])).lower()
if del_special == del_special[::-1]:
return 1
else:
return 0
def _test_case():
test_case = (
('A man, A plan, a canal: Panama', 1),
)
for idx, (letter, answer) in enumerate(test_case, 1):
result = is_palindrome(letter)
if result == answer:
print('OK')
else:
print(f'FAIL \nletter: {letter}\nanswer: {answer}\nresult: {result}')
if __name__ == '__main__':
# _test_case()
letter = input().strip()
print(is_palindrome(letter))
문제 2. 가장 많이 등장한 알파벳 찾기
📘 문제 설명
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
📥 입력 형식
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
📤 출력 형식
첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.
입력 예시 1
1
Mississipi
출력 예시 1
1
?
입력 예시 2
1
zZa
출력 예시 2
1
Z
입력 예시 3
1
z
출력 예시 3
1
z
입력 예시 4
1
baaa
출력 예시 3
1
A
해설
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
29
30
31
from collections import Counter
def solution(word):
counter = Counter(word.upper())
result = counter.most_common(2)
return '?' if len(result) > 1 and result[0][1] == result[1][1] else result[0][0]
def _test_case():
test_case = (
('Mississippi', '?'),
('zZa', 'Z'),
('z', 'Z'),
('baaa', 'A')
)
for idx, (word, answer) in enumerate(test_case, 1):
result = solution(word)
if result == answer:
print(f'#{idx} OK')
else:
print(f'#{idx} FAIL')
if __name__ == "__main__":
# _test_case()
word = input().strip()
print(solution(word))
This post is licensed under CC BY 4.0 by the author.