프로그래머스 파이썬 기초 해석 :: 문자열 섞기(join, zip, append/insert)

 

프로그래머스 URL

https://school.programmers.co.kr/learn/courses/30/lessons/181942



프로그래머스 코딩 카테고리 

코딩 기초 트레이닝

Day 3 연산 - 문자열 섞기 

Lv.0





문제 설명

길이가 같은 두 문자열 str1과 str2가 주어집니다. 

두 문자열의 각 문자가 앞에서부터 서로 번갈아가면서 한 번씩 등장하는 문자열을 만들어 return 하는 solution 함수를 완성해 주세요.




제한 사항

1 ≤ str1의 길이 = str2의 길이 ≤ 10 

str1과 str2는 알파벳 소문자로 이루어진 문자열입니다.



문제 이해

[입력값] str1, st2 둘다 문자열 

[출력값] answer 문자열

반복문 필요 - 두 문자열의 [0]자리 출력, [1] 자리 출력 ,,, 이 필요하기 때문에 

(while문 보다는 for문) 



------------------------



내가 푼 풀이


def solution(str1, str2):
    answer = ''

    for i in range(len(str1)):   
        answer += str1[i]
        answer += str2[i]
    return answer

고칠점 

1. for문 
for문의 범위를 설정할때, range()를 안쓰고 len(str1)만 써서 오류가 났다. 
다른 프로그래밍 언어의 for문법이랑 헷갈렸던 것 같다.
파이썬의 for문은 몇부터 몇까지 돌리겠다는 범위 자체를 in 자리 뒤에 써야한다. range()를 많이 쓸 듯 


2. 문자열 더하기

answer += str1[i] + str2[i]



다른 문제풀이 해석 

1. 리스트 컴프리헨션 + join으로 문자열 합치기 

def solution(str1, str2): 
    answer = ''.join([str1[i] + str2[i] for i in range(len(str1))]) 
    return answer

위 코드는 join 함수의 인자 자리에 리스트 컴프리헨션을 썼다. 

for문 리스트 컴프리헨션 문법은 중괄호랑 둥근 괄호 다 가능한데, 저장하는 방식은 다르다. 

result = [x for i in range(범위)] #리스트로 저장됨

result = (x for i in range(범위)) #제너레이티브 표현식(일회성)으로 저장됨, 메모리 덜잡아먹음


join()은 문자열을 합칠때 쓰는 것으로, str + str2의 문자열 + 연산 기능과 같다. 

'문자열구분자'.join(문자열 요소들) 

문자열 구분자 : ' ' 작은 따음표 안에 공백이든 \n 줄바꿈이든 넣을 수 있음

문자열 요소들 : 반복 가능한 범위를 가진 문자열 요소들 ex) word = ['a', 'b', 'c']


2. zip()

zip 함수는 n개의 Iterable(리스트, 튜플, 문자열처럼 반복 가능한 객체)을 묶어서 튜플로 표현하는 함수이다. 

(예제는 아래참고)


numbers = [1, 2, 3]
letters = ['A', 'B', 'C']
zipped = zip(numbers, letters)
출력은 [(1, 'A'), (2, 'B'), (3, 'C')] 이렇게 

for문의 범위에 zip함수를 쓰면 for i, j in zip(list1, list2): 처럼 두 개 리스트를 하나의 for문에서 돌리는거라 for문은 2개의 요소를 가지게 된다. 
for i in list의 더블 버전 느낌


이거를 활용하면, 아래같은 코드가 가능 

def solution(str1, str2):
    answer = ''
    for i,j in zip(str1,str2):
        answer += i+j
    return answer



3. 리스트로 반환, append / insert

def solution(str1, str2):  
    answer = []
    for i in range(len(str1)):
        answer.append(str1[i])
        answer.append(str2[i])
    return ''.join(answer)

입출력이 문자열이라서, 굳이 리스트로 안해도 될 것 같긴한데 다양한 방법을 공부해볼려고 추가해보았다. 

리스트에 요소를 추가할때, 두가지 메서드가 있다. 




① 객체명.append(넣고자하는 요소) 

객체의 마지막 자리에 새로운 요소를 추가하는 것. 


#리스트 
fruits = ["apple", "banana", "orange"]
fruits.append("grape")
print(fruits)



② 객체명.insert(인덱스, 넣고자하는 요소) 

객체의 원하는 자리에 새로운 요소를 추가하는 것. 


#리스트
fruits = ["apple", "banana", "orange"]
fruits.insert(1, "grape")
print(fruits)






------------------------


느낀점

문자열, 리스트에서 계속 나오는 반복 가능한 객체인 iterable에 대해서 점점 알아가고 있다. 문자열이랑 리스트는 다르면서도 참 비슷한 구석이 많은 것 같다. 한 문제, 한 문제를 풀 수록 몰랐던 함수나 메서드 등 신기한 문법을 알게되는 것 같다. 

기초가 오래 걸리더라도 튼튼하게 쌓아보도록 노력하자







댓글

이 블로그의 인기 게시물

[KT 에이블스쿨 - IT 트랜드] 국내외 AI 관련 규제

KT 에이블스쿨 : 6-7차 미니프로젝트 - 제안서 기반 솔류션 기획 및 설계

KT 에이블스쿨 : 클라우드 서비스 1일차 정리