print(ord('A')) # 65
print(chr(65)) # A
numList = list(map(int,input())) # 공백 없이 54321 입력
stringList = list(input()) # 공백 없이 UNUCIC 입력
print(numList) # [5, 4, 3, 2, 1]
print(stringList) # ['U', 'N', 'U', 'C', 'I', 'C']
string = "word1 word2 word3 word4 "
print(string.split())
print(string.split(" "))
>>> ['word1', 'word2', 'word3', 'word4']
['word1', 'word2', '', 'word3', '', '', '', 'word4', '', '', '', '', '']
split() -> 공백이 n개가 있어도 1개로 처리하여 공백없이 구분
split(" ") -> 공백 1개까지만 변수 구분자로 처리, 나머지는 리스트 요소로 처리
내 코드
string = list(map(str, input()))
result = [ -1 for _ in range(26)]
stringIndex = []
index = 0
for i in range (len(string)):
# print(ord('a')) 97 ~ print(ord('z')) 122 = 소문자 개수 26개
stringIndex.append(ord(string[i]) - 97)
for i in stringIndex:
if result[i] == -1:
result[i] = index
index += 1
for i in range(26):
print(result[i], end=' ')
다른 사람 코드
word = input()
# print(ord('a')) 97 ~ print(ord('z')) 122 = 소문자 개수 26개
alphabet = list(range(97, 123))
for x in alphabet:
print(word.find(chr(x)), end=' ')
아스키 코드를 사용한다는 아이디어까지는 캐치했지만, find 함수를 생각해내지 못했다.
str.find(찾을 문자)
str.find(찾을 문자, 시작 index)
str.find(찾을 문자, 시작 index, 끝 index)
slice
[start:stop:step]
string[::-1] # 반대 방향으로 데이터 나열
a, b = input().split()
print(max(a[::-1],b[::-1])) #슬라이스를 이용한 문자열 뒤집기
내 코드
# 아스키 코드 이용
number = list(input())
sum = 0
# 아스키코드 print(ord('A')): 65 ~ print(ord('Z')): 90 대문자 총 26개
list = list(range(65, 91))
for i in range(len(number)):
if(79 >= ord(number[i])): # 숫자 2~6
sum += 3 # 숫자 2에 도달하기까지 3초
sum += (ord(number[i])-65) // 3 # 한 칸 옆에 있는 숫자를 걸기 위해선 1초씩 더 걸린다.
elif(83 >= ord(number[i])): # 숫자 7
sum += 8
elif(86 >= ord(number[i])): # 숫자 8
sum += 9
else: # 숫자 9
sum += 10
print(sum)
다른 사람 코드
dial = ['ABC','DEF','GHI','JKL','MNO','PQRS','TUV','WXYZ']
string = input()
sum = 0
for i in range(len(string)):
for j in dial:
if string[i] in j:
sum += dial.index(j) + 3 # 숫자 2에 도달하기까지 3초 + index
아스키 코드를 사용하는게 능사는 아닌 듯 하다.
아래가 더 좋은 코드로 파악된다. 알고리즘을 잘 파악하자.
while True:
try:
print(input())
except EOFError: # EOF는 END OF FILE 즉 문자의 끝
break
EOF(End Of File) Error: input을 사용한 입력 시 더 이상 입력할 파일이 없음을 의미
word = input().upper()
wordList = list(set(word)) # set 함수를 쓰고 list화 - 단어의 문자 list(중복x)
countList = []
for i in wordList:
countList.append(word.count(i))
if(countList.count(max(countList)) > 1):
print('?')
else:
print(wordList[countList.index(max(countList))])
해설 및 사용된 함수
upper() - 대문자 변경 함수/ lower() - 소문자 변경 함수
wordList - 단어의 문자 list(중복x)
countList - wordList에서 요소를 뽑아 단어에 사용된 횟수로 변환하여 배열화
wordList & countList 배열의 길이 같음, index 매핑
n = int(input())
sum = n
for _ in range(n):
word = input()
for i in range(len(word) - 1):
if (word[i] == word[i + 1]):
pass
elif (word[i] in word[i + 1:]):
sum -= 1
break
print(sum)
word[i]와 word[i + 1]을 비교 하므로 for문은 단어의 길이 - 1만큼만 돌려야한다.
sum = 0, sum += 1로 count할 경우 elif (word[i] in word[i + 1:]): 조건 식을 만족하지 못하면 sum이 계산이 되지 않는다. 그러므로 count는 n으로 초기화하고, elif (word[i] in word[i + 1:]): 일 경우에만 count에서 제외하면 된다.
grade = ['A+', 'A0', 'B+', 'B0', 'C+', 'C0', 'D+', 'D0', 'F']
gradeNum = [4.5, 4.0, 3.5, 3.0, 2.5, 2.0, 1.5, 1.0, 0.0]
total = 0
result = 0
for _ in range(20):
n, s, g = input().split()
if g != 'P':
total += float(s)
result += float(s) * gradeNum[grade.index(g)]
avg = result/total
print(round(avg, 6))
💡Tip
문자, 숫자의 list length가 같고 매핑되는 경우, if문이 아닌
리스트a[리스트b.index(리스트b에 존재하는 요소 값)] 를 이용