← 실전 문제

이름 앞부분으로 묶기

Python빈칸 채우기

이름 목록 names에서 prefix로 시작하는 이름 수를 구해요. 비교할 때 이름과 prefix의 앞뒤 공백을 제거하고 영문 대소문자를 구분하지 않아요. 이름 중간의 공백은 그대로 두어요. 같은 이름이 여러 번 있으면 항목마다 각각 세요.

solution(names, prefix)가 개수를 반환하도록 빈칸을 채워 주세요. normalize는 비교용 문자열을 만들어요.

매개변수와 반환값

  • 이름 수 n은 1100, 각 이름의 길이는 150이에요.
  • 이름과 prefix는 영문자와 공백만 포함해요. 이름과 prefix는 모두 공백 제거 후 영문자를 하나 이상 포함해요.
  • prefix의 원래 길이는 1~20이에요. 이름보다 길어도 돼요.
  • 반환값은 일치한 항목 수인 정수예요.

예시

  1. names = [' Ann', 'ANNA ', 'Ben', 'An drew'], prefix = ' an '이면 결과는 3이에요.
  2. names = ['blue room', 'Blue', ' red'], prefix = 'BLUE '이면 결과는 2이에요.

실행용 입출력

첫 줄에 n, 둘째 줄에 prefix를 입력하고 다음 n줄에 이름 하나씩 입력해요. 줄의 앞뒤 공백도 문자열의 일부예요. 개수 하나를 출력해요.

예시 입력

4
 an 
 Ann
ANNA 
Ben
An drew

예상 결과

3

예시 입력

3
BLUE 
blue room
Blue
 red

예상 결과

2
핵심 개념
  • function-design: normalize(text)의 반환값은 원래 문자열을 바꾸지 않고 비교용으로 만든 새 문자열이에요.
  • array-1d: for name in names로 리스트의 문자열을 하나씩 읽어요.
  • conditionals: .startswith(key)는 문자열이 key로 시작하면 참을 반환해요. text[:k]는 앞의 k개 문자를 읽는 슬라이스예요.

문자열의 .strip()은 앞뒤 공백을 제거하고 .lower()는 영문자를 소문자로 바꿔요. 중간 공백은 제거하지 않아요. input()은 줄 하나를 읽으며 줄 끝 개행은 제외하지만 앞뒤 공백은 남아요. int(input())은 그 문자열을 정수로 변환해요.

[input() for _ in range(n)]은 n줄을 읽어 새 리스트에 모으는 컴프리헨션이에요. _는 반복 횟수만 필요해 사용하지 않는 반복 변수 이름이에요.

코드 작성과 채점은 로그인 후 이용해요

로그인하고 풀기