ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 1. 문자열 다루기
    코딩테스트 2024. 3. 17. 21:32
    반응형

    옹알이 - https://school.programmers.co.kr/tryouts/85889/challenges

    replace를 활용해 문자 대체 후 패턴 파악. 빈 문자열 대신 마스킹(_) 문자를 넣고, 마지막에 빈 문자열로 대체해서 분리된 문자 처리(y aya e → aya + ye 허용 될 수 있으므로)

    def solution(babbling):
        answer = 0
        pattern = ["aya", "woo", "ye", "ma"]
        for word in babbling:
            for p in pattern:
                word = word.replace(p, "_")
            word = word.replace("_", "")
            if word == "":
                answer += 1
        return answer

     


    문자열 계산하기 - https://school.programmers.co.kr/tryouts/85890/challenges

    공백 하나로 구분되어 있으므로 분리 한 뒤, 연산자에 따라서 계산하면 됨. 형 변환 주의.

    def solution(my_string):
        answer = 0
        a = my_string.split(" ")
        for index, value in enumerate(a):
            if not index: 
                answer = int(value)
                continue
            if not value.isnumeric():
                if value == "+":
                    answer += int(a[index+1])
                if value == "-":
                    answer -= int(a[index+1])
        return answer

     


    OX퀴즈 - https://school.programmers.co.kr/tryouts/85891/challenges

    이전 문제와 동일한 아이디어 - 공백 하나로 분리한 뒤 진행.

    def solution(quiz):
        answer = []
        for q in quiz:
            q = q.split(" ")
            for index, value in enumerate(q):
                if index == 0:
                    ans = int(value)
                else:
                    if value == "+":
                        ans += int(q[index+1])
                    elif value == "-":     
                        ans -= int(q[index+1])
                    elif value == "=":
                        break
            if ans != int(q[-1]):
                answer.append("X")
            else:
                answer.append("O")
        return answer

     


    숨어있는 숫자의 덧셈(2) - https://school.programmers.co.kr/tryouts/85892/challenges

    단순하게 모든 문자 순회하면서 더해줌. 연속된 숫자를 기록하기 위해 num 변수 사용

    def solution(my_string):
        answer, num = 0, 0
        for c in my_string:
            if c.isnumeric():
                if not num: # num == 0
                    num = int(c)
                else:
                    num = (num*10 + int(c))
            elif num:   # num이 존재할 경우
                answer += num
                num = 0
        answer += num # 숫자로 끝나는 경우 예외 처리
        return answer

     


    인덱스 바꾸기 - https://school.programmers.co.kr/tryouts/85893/challenges

    리스트의 요소를 구분자를 넣어서 문자열로 변환하는 join 메소드를 통해 간단하게 해결.

    기본적으로 빈 문자열을 넣어 연속된 형태로 만들어주지만, “ “ or “,” or “.” 등을 사용할 수도 있음

    def solution(my_string, num1, num2):
        str_list = list(my_string)
        str_list[num1], str_list[num2] = str_list[num2], str_list[num1]
        answer = "".join(str_list)
        return answer

     


    문자열 밀기 - https://school.programmers.co.kr/tryouts/85894/challenges

    2배로 나열한 뒤 find 메소드로 패턴 일치 여부를 확인했음.

    def solution(A, B):
        answer = 0
        tmp = B*2
        cnt = 0
        return tmp.find(A)

     


    자릿수 더하기 - https://school.programmers.co.kr/tryouts/85895/challenges

    문자열로 형변환 한 뒤에 list로 분리하고 다시 숫자로 바꿔준 뒤에 합침.

    def solution(n):
        tmp = map(int, list(str(n)))
        return sum(i for i in tmp)

     


    문자열 나누기 - https://school.programmers.co.kr/tryouts/85896/challenges

    단순한 구현 문제.

    def solution(s):
        answer = 1
        same_cnt, dif_cnt = 0, 0
        c = ""
        for index, cc in enumerate(s):
            if cc != c:
                if same_cnt == 0: # 분해 후 첫번째 문자
                    same_cnt = 1
                    c = cc
                elif same_cnt - dif_cnt == 1: # 분해한 뒤 같아지는 경우
                    same_cnt = 0
                    dif_cnt = 0
                    c = ""
                    if index != len(s)-1: # 마지막인 경우엔 분해 안하므로 예외처리
                        answer += 1
                else: # 다른 문자 카운트
                    dif_cnt += 1
            else: # 같은 문자
                same_cnt += 1
            
                
        return answer

     


    옹알이(2) - https://school.programmers.co.kr/tryouts/85897/challenges

    1번과 유사한 문제인데, 연속된 발음을 처리 해야 함. 각 패턴마다 처리 후 공백으로 처리한 뒤에 마지막에 빈 문자열로 대체해주면 됨.

    def solution(babbling):
        answer = 0
        pattern = ["aya", "woo", "ye", "ma"]
        flag = False
        for b in babbling:
            for p in pattern:
                b = b.replace(p, "_")
                if b.find("__") != -1: # 연속된 발음 존재시 X
                    flag = True
                    break
                b = b.replace("_", " ")
            if flag:
                flag = False
                continue
            b = b.replace(" ", "")
            if b == "":
                answer += 1
        return answer
    반응형

    '코딩테스트' 카테고리의 다른 글

    5. 셋(집합)  (0) 2024.03.20
    4. 딕셔너리(해시맵)  (0) 2024.03.20
    3. 배열/리스트  (0) 2024.03.18
    2. 구현  (4) 2024.03.18
    코딩테스트 문제 유형 별 정리 및 문제 모음  (0) 2024.03.17
Designed by Tistory.