[Python] 코딩 도장 - 사이냅소프트 면접문제
Updated:
코딩 도장 사이트의 문제를 직접 풀어본 내용을 정리하여 올립니다.
코딩 도장에서 여러 문제를 확인할 수 있습니다.
난이도 순으로 차근차근 풀어보려 합니다.
[문제: 사이냅소프트 면접문제] - Lv.1
주어진 문자열(공백 없이 쉼표로 구분되어 있음)을 가지고 아래 문제에 대한 프로그램을 작성하세요.
이유덕,이재영,권종표,이재영,박민호,강상희,이재영,김지완,최승혁,이성연,박영서,박민호,전경헌,송정환,김재성,이유덕,전경헌
-
김씨와 이씨는 각각 몇 명 인가요?
-
“이재영”이란 이름이 몇 번 반복되나요?
-
중복을 제거한 이름을 출력하세요.
-
중복을 제거한 이름을 오름차순으로 정렬하여 출력하세요.
출처: https://codingdojang.com/scode/410?answer_mode=hide
[풀이]
# 1.김씨와 이씨는 각각 몇 명 인가요?
data = ["이유덕","이재영","권종표","이재영","박민호","강상희","이재영","김지완",
"최승혁","이성연","박영서","박민호","전경헌","송정환","김재성","이유덕","전경헌"]
# "성" dictionary 생성
names = {str(name)[0]:0 for name in data}
# "성" count
for name in data:
names[str(name)[0]] += 1
names
{'이': 6, '권': 1, '박': 3, '강': 1, '김': 2, '최': 1, '전': 2, '송': 1}
한 줄 for문으로 각 “성”과 초기값 0을 가지는 dictionary를 생성한다.
for문으로 전체 “성”별 갯수를 계산한다.
김씨는 2명, 이씨는 6명이다.
# 2. "이재영"이란 이름이 몇 번 반복되나요?
import pandas as pd
pd.Series(data).value_counts()
이재영 3
박민호 2
이유덕 2
전경헌 2
김지완 1
강상희 1
송정환 1
권종표 1
박영서 1
김재성 1
이성연 1
최승혁 1
dtype: int64
판다스 시리즈로 이름별 갯수를 계산하였다.
이재영은 3번 반복되었다.
# 3. 중복을 제거한 이름을 출력하세요.
unique_data = list(set(data))
unique_data
['전경헌',
'김재성',
'강상희',
'박민호',
'최승혁',
'이성연',
'박영서',
'이유덕',
'권종표',
'송정환',
'김지완',
'이재영']
집합은 중복을 허용하지 않는 성질을 이용한다.
# 4. 중복을 제거한 이름을 오름차순으로 정렬하여 출력하세요.
unique_data.sort()
unique_data
['강상희',
'권종표',
'김재성',
'김지완',
'박민호',
'박영서',
'송정환',
'이성연',
'이유덕',
'이재영',
'전경헌',
'최승혁']
sort
를 이용해서 정렬한다.
집합은 sort
가 불가능해서 3번에서 리스트로 설정하였다.
[추천 풀이]
names = "이유덕,이재영,권종표,이재영,박민호,강상희,이재영,김지완,최승혁,이성연,박영서,박민호,전경헌,송정환,김재성,이유덕,전경헌".split(",")
#1
a=[ i[0] for i in names ]
print("김씨 : %d\n이씨 : %d\n"%(a.count("김"), a.count("이")))
#2
print(names.count("이재영"))
#3
uniq_names = list(set(names))
print(uniq_names)
#4
uniq_names.sort()
print(uniq_names)
김씨 : 2
이씨 : 6
3
['전경헌', '김재성', '강상희', '박민호', '최승혁', '이성연', '박영서', '이유덕', '권종표', '송정환', '김지완', '이재영']
['강상희', '권종표', '김재성', '김지완', '박민호', '박영서', '송정환', '이성연', '이유덕', '이재영', '전경헌', '최승혁']
다른 분들이 풀이한 내용 중 추천 수가 많은 풀이이다.
우선 split
으로 간단하게 원본 데이터를 만들었다.
1번 2번의 경우 리스트에 count
를 써서 간편하게 만들었다.
3번 4번은 동일하다.
Leave a comment