[Python] 코딩 도장 - 사이냅소프트 면접문제

Updated:

코딩 도장 사이트의 문제를 직접 풀어본 내용을 정리하여 올립니다.

코딩 도장에서 여러 문제를 확인할 수 있습니다.

난이도 순으로 차근차근 풀어보려 합니다.


[문제: 사이냅소프트 면접문제] - Lv.1

주어진 문자열(공백 없이 쉼표로 구분되어 있음)을 가지고 아래 문제에 대한 프로그램을 작성하세요.

이유덕,이재영,권종표,이재영,박민호,강상희,이재영,김지완,최승혁,이성연,박영서,박민호,전경헌,송정환,김재성,이유덕,전경헌
  1. 김씨와 이씨는 각각 몇 명 인가요?

  2. “이재영”이란 이름이 몇 번 반복되나요?

  3. 중복을 제거한 이름을 출력하세요.

  4. 중복을 제거한 이름을 오름차순으로 정렬하여 출력하세요.

출처: 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