-
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