find( )
: 문자열에서 특정 문자를 찾고 위치를 반환해주는 함수
리스트, 튜플, 딕셔너리 자료형에서는 사용하지 못함.
dictionary { }
: 대응관계를 나타낼 수 있는 자료형
{ key1 : value1 , key2 : value2 ......} 의 형태로 이루어져 있다.
▶ a[key] = value 의 형태로 추가 가능
▶ del a[key] 로 한 쌍 삭제 가능
▶ a[key]이면 value를, a[value]면 key를 출력
▶ key는 고유한 값으로, 중복이 되지 않도록 해야 한다. (중복될 경우 하나만 남기고 나머지는 무시됨)
▶ 리스트를 key로 사용할 수 없다.
▶ a.keys( ) : key 요소들만 담긴 객체 반환
▶ a.values( ) : value 요소들만 담긴 객체 반환
▶ a.items( ) : 각 쌍을 담은 객체 반환
1. 알파벳 찾기
10809번: 알파벳 찾기 (acmicpc.net)
#알파벳 찾기
S = input()
alphabet = list(range(97, 123))
for i in alphabet:
print(S.find(chr(i)), end = " ")
아스키 코드로 문자 'a'는 97, 'z'는 122이다. 따라서 alphabet 리스트를 구현해준 뒤,
S라는 문자열 속에서 chr( ) ( : 아스키 코드를 문자로 변환해주는 함수) 와 find( )를 이용하여
해당 문자가 S에 주어진다면 그 위치를 반환하도록 해준다.
end = " "를 이용하여 공백을 사이로 이어서 출력되게끔 해준다.
#알파벳 찾기
S = list(input())
alphabet = list("abcdefghijklmnopqrstuvwxyz")
result = []
for i in range(len(alphabet)):
if alphabet[i] in S:
result.insert(i, S.index(alphabet[i]))
else:
result.insert(i, -1)
for i in result:
print(i, end = " ")
a가 아스키 코드로 몇 번인지 모를 경우에 짜볼 수 있는 코드이다.
리스트에는 find 함수와 비슷한 index 함수가 존재한다.
따라서, alphabet을 순차대로 돌리며 S에 존재한다면, S에 value( =alphabet[i] )가 존재하는 index값을
insert함수를 이용하여 result 리스트에 넣어준다.
존재하지 않는다면, -1을 삽입
2. 단어 공부
1157번: 단어 공부 (acmicpc.net)
#단어 공부
word = input().upper()
alphabet = {} #딕셔너리
for i in word:
if i in alphabet:
alphabet[i] += 1
else:
alphabet[i] = 1
result = []
for key, value in alphabet.items():
if value == max(alphabet.values()):
result.append(key)
if len(result) >= 2:
print("?")
else:
print(result[0])
굳이굳이굳이 딕셔너리가 쓰고 싶었음. 몰라 그냥 해당 문자에 대한 수를 카운트 하는 게 딕셔너리로 하면 좋겠다 했음
따라서 alphabet이라는 딕셔너리를 선언하고, 존재하지 않는다면 alphabet[i] = 1로 값을 넣어준다.!
{ i : 1}의 형태로 들어가게 됨.
존재한다면, +1로 카운트해준다.
result = [ ]를 처음에 max = [ ]로 선언을 해주었더니,
TypeError: 'list' object is not callable라는 오류가 발생하였다.! 내장 함수에 max가 있어서 혼선이 발생한다고 한다.!
되도록이면 다른 변수이름을 사용하도록...ㅎㅎ
이 문제는 좀 저렇게 풀면서도 for문을 통해서 최대가 중복이 될 경우를 풀 때 아리송했다.
뭔가 저 생겨먹은 게 내 스타일이 아니다.
다음에 다시 풀 때 다른 방법을 시도해야겠다.