거대한 정보의 더미들/파이썬 코딩테스트 정리

230116 프로그래머스 코딩테스트 기초 100제 체크포인트

PurpleGuy101 2023. 1. 22. 14:42

 

문자열을 다루는 법

 

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

 

1. 특정 문자의 제거

 

(https://school.programmers.co.kr/learn/courses/30/lessons/120826)

 

- 내가 사용한 방법

 

C언어 맹쿠로 문자열을 나타내기 위해 list(my_string)을 한 후 for문을 돌려서 새 리스트를 append로 만든 후 

' '.join(<리스트>) 하기.

 

-> 파이썬의 문자열을 다루는 방법에 대해 익숙해질 필요가 있다.

def solution(my_string, letter):
    
    answer = []
    str_list = list(my_string)
    for letter_list in str_list:
        if letter_list != letter:
            answer.append(letter_list)
    return ''.join(answer)

 

 

- 간단한 방법

def solution(my_string, letter):
    return my_string.replace(letter, '')

 

- 리스트를 사용하지 않고 문자열만을 활용하는 방법

def solution(my_string, letter):
    answer = ''
    for string in my_string:
        if string != letter:
            answer += string
    return answer

 

 

----

 

2. 문자열 뒤집기

 

(https://school.programmers.co.kr/learn/courses/30/lessons/120822)

 

- 내가 사용한 방법

def solution(my_string):
    
    list_str = list(my_string)
    new_list_str = list_str[::-1]
    
    answer = ''
    for i in new_list_str:
        answer = answer + f'{i}'
    
    return answer

리스트로 만든 후, step size를 -1로 설정하여 새 원소들을 answer 문자열에 붙이기

 

-> 굳이 리스트를 사용하지 않아도 된다.

 

- 간단한 방법

def solution(my_string):
    return my_string[::-1]

문자열에서 바로 step size를 설정해버리기

 

 

---

 

 

3. 내장함수의 활용

 

문자열 뒤집기

>>> a = ['a', 'c', 'b']
>>> a.reverse()
>>> a
['b', 'c', 'a']

 

문자열에서 특정 단어 제거하기

def solution(my_string, letter):
    return my_string.replace(letter, '')

------

 

4. combination 함수

 

from itertools import combinations

def solution(dots):
    a = []
    for (x1,y1),(x2,y2) in combinations(dots,2):
        a.append((y2-y1,x2-x1))

    for (x1,y1),(x2,y2) in combinations(a,2):
        if x1*y2==x2*y1:
            return 1
    return 0

 

 

 

# 문자열과 리스트의 변환

문자열->리스트 시에는 list(input_string)으로

리스트->문자열 시에는 "".join(input_list)으로.

 

# split 함수

문자열을 쪼갤때 쓰는 함수.

'h e llo'.split(' ') 혹은 'h e llo.split(sep=' ')을 하면 

['h', 'e', 'llo']을 얻을 수 있다.

sep 파라미터 말고도 maxsplit 파라미터도 존재한다. 디폴트 -1값에, split 횟수를 제한하고 싶을 때 값을 넣어준다.

 

 

# 리스트 다루기

del input_list [ index ]를 하면 해당 인덱스의 원소를 제거한다.

input_list = [1,2,3,4]
del input_list[2]
print(input_list)

하면, 2번 인덱스의 원소가 사라지고 [1,2,4]가 반환된다.

또한 문자열처럼, 리스트도 [1,2] + [3,4]를 통해 [1,2,3,4]를 만들 수 있다.

list_1.extend(list2)를 통해 list_1에서 list_2를 이어 붙일 수도 있다.

 

# find와 index 함수

find 함수는 문자열에서 특정 문자열을 찾으며 없으면 -1을 반환.

index 함수는 리스트에서 특정 값을 가진 원소를 찾으며 없으면 error발생.

 

# sorted 함수

sorted(input_string)

문자열 안의 문자들을 크기 순으로 소팅하여 리스트로 만들어 준다.

 

# map 함수

리스트나 튜플의 원소에 대해서 동일한 인덱스값에

함수를 적용한 output을 원소로 가지는 map 객체를 반환하는 함수.

input_list = ['a','b','c']

output_list = list( map( ord, input_list) )

print( output_list )

를 하면, 아스키코드값에 해당하는 [ 97, 98, 99 ]를 얻을 수 있다.

list( map(chr, [ 97, 98, 99 ]) )을 하면 다시  ['a','b','c']를 얻을 수도 있다.

 

# count 함수

리스트나 문자열에서 value나 substring의 개수를 세어주는 함수.

 

 

# dictionary 자료형

dict1 = { '1':'a' , '2':'b', '3':'c' }와 같은 key:value pair를 원소로 가지는 자료형.

for pair in dict1:

    print(pair)

를 한다면, 

1

2

3

이라는 결과를 얻을 수 있다. for문을 돌리면 key만 출력된다.

 

또한 dict1[0], dict[1], dict[2]를 출력하면, a,b,c가 출력 될 것을 알 수 있다.

고로 위의 for문에서 value만 출력하고 싶다면

for pair in dict1:

    print(dict1[pair])를 하면 된다.

 

# eval 함수

받은 문자열을 그대로 연산하게 해주는 내장함수

받은 문자열을 통해 별의 별 짓을 다 할 수 있어서 scanf처럼 안쓰는게 좋다.

 

# bin 함수

받은 십진법의 정수를 이진수로 바꿔준다.

print(bin(10))은 0b1010을 출력한다.

이는 int(10,2)로도 나타낼 수 있다.

int함수의 base 파라미터를 2로 설정하여 나타낼 수 있기 때문이다.