[백준] 10809번(문자열 원소 검사)

·2022년 11월 7일

백준 문제풀이

목록 보기
11/159

백준 10809번


최종 제출 코드

sentence = list(input())
lists = []

# a부터 z까지 검사하는 반복문
for i in range(97, 123):
  # 입력받은 문자열을 검사하는 반복문
  for j in range(len(sentence)):
    number = -1
    if ord(sentence[j]) == i:
      number = j
      break
  lists.append(number)

for i in range(len(lists) - 1):
  print(lists[i], end=' ')
print(lists[25])

처음 작성한 코드

sentence = list(input())
lists = []

for i in range(97, 123):
  for j in range(len(sentence)):
    if chr(int(sentence[j]))==i:
      lists.append(j)
      break
    # 틀린 부분
    else:
      lists.append(-1)

for i in range(len(lists) - 1):
  print(lists[i], end=' ')
print(lists[25])
  • 문자열을 검사한 후, 문자열에 없는 알파벳일 경우 리스트에 -1을 추가하는 코드가 틀림!
  • 위와 같이 작성하면 하나의 원소 당 a~z 모든 알파벳에 대한 검사 결과가 리스트에 저장됨

두 번째로 작성한 코드

sentence = list(input())
lists = []

for i in range(97, 123):
  for j in range(len(sentence)):
    if ord(sentence[j])==i:
      lists.append(j)
      break
  # 틀린 부분
  lists.append(-1)
  break

for i in range(len(lists) - 1):
  print(lists[i], end=' ')
print(lists[25])
  • 위와 같이 작성하면 문자열에 존재하지 않는 알파벳일 경우 제대로 값이 저장되지만, 문자열에 존재하는 알파벳의 경우 sentence 내 인덱스 값과 -1이 모두 추가됨
  • 따라서 두 번째 for문 안에서는 리스트에 저장할 값만 설정하고, 리스트에 값을 추가하는 건 for문 밖에서 실행하는 것으로 수정

다른 사람이 작성한 코드

S = input()
check = [-1]*26
 
for i in range(len(S)):
  if check[ord(S[i])-97] != -1:
    continue
  else:
    check[ord(S[i])-97] = i
        
for i in range(26):
  print(check[i], end=' ')

[출처]

  • 내가 작성한 코드는 a~z까지 알파벳에 대해 문자열에 존재하는지를 검사
  • 위의 코드는 문자열 내에 존재하는 알파벳에 대해서만 체크
profile
백엔드 개발자가 되고 싶어요(22.8.15~)

0개의 댓글