728x90
반응형
2024년 2회 정보처리기사 실기 기출문제
문제
다음 파이썬 코드의 실행 결과를 쓰시오.
def cnt(str, p):
result = 0
for i in range(len(str) - len(p) + 1):
sub = str[i:i+len(p)]
if sub == p:
result += 1
return result
str = "abdcabcabca"
p1 = "ca"
p2 = "ab"
print(f'ab{cnt(str, p2)}ca{cnt(str, p1)}')
정답
ab3ca3
반응형
해설
▼ 비슷한 기출 문제도 같이 풀어보세요▼
[정보처리기사] [Python] 문자열에서 특정 패턴 찾는 방법 | 슬라이싱 & f-string 활용 |
2024년 2회 정보처리기사 실기 기출문제문제다음 파이썬 코드의 실행 결과를 쓰시오.def fnCalculation(x, y): result = 0; for i in range(len(x)): temp = x[i:i+len(y)] if temp == y: result += 1; return resulta = "abdcabcabca"p1 = "
august-jhy.tistory.com
📌 핵심 개념
1️⃣ 슬라이싱 (Slicing)
text = "abcdef"
print(text[1:4]) # 결과: "bcd"
- 슬라이싱(Slicing)은 문자열 또는 리스트에서 일정 범위의 일부를 잘라내는 작업입니다. 슬라이싱은 시작 인덱스부터 끝 인덱스 직전까지 선택한다는 점이 중요합니다.
- text[1:4]는 1번 인덱스부터 4번 인덱스 '직전까지' 잘라낸 문자열을 의미합니다. 즉, 1, 2, 3번째 문자 "bcd"가 결과로 출력됩니다.
2️⃣ range() 함수
range(start, stop, step)
- 파이썬의 range() 함수는 정해진 범위만큼 반복할 때 사용합니다. 주로 for 반복문과 함께 사용되어, 정해진 횟수만큼 반복 작업을 수행할 때 쓰입니다.
- range() 함수는 최대 세 개의 인자를 받을 수 있습니다:
매개변수 | 의미 | 예시 |
start | 시작 값 (포함) | 생략 시 기본값은 0 |
stop | 종료 값 (불포함) | 반드시 지정해야 함 |
step | 증가값 (기본값은 1) | 음수도 가능함 |
🔶 range(stop)
range(5)
→ [0, 1, 2, 3, 4]
🔶 range(start, stop)
range(2, 6)
→ [2, 3, 4, 5]
🔶 range(start, stop, step)
range(1, 10, 2)
→ [1, 3, 5, 7, 9]
🔶 step이 음수일 경우
range(10, 0, -2)
→ [10, 8, 6, 4, 2]
3️⃣ len() 함수
len(대상)
- len()은 "length(길이)"의 약자로, 문자열, 리스트, 튜플, 딕셔너리 등과 같은 시퀀스(순서 있는 자료형)의 요소 개수를 반환하는 파이썬의 내장 함수입니다.
text = "apple"
print(len(text)) # 출력: 5
- 문자열 "apple"에는 5개의 문자(a, p, p, l, e)가 있으므로 결과는 5입니다.
fruits = ["apple", "banana", "cherry"]
print(len(fruits)) # 출력: 3
- 리스트에는 3개의 요소가 있으므로 결과는 3입니다.
4️⃣ 문자열 포맷팅(f-string) : 문자열 내에 특정 값을 삽입하는 방법
name = "Alice"
age = 30
print(f"My name is {name} and I am {age} years old.")
# 출력 : My name is Alice and I am 30 years old.
a = 3
b = 4
print(f"{a} + {b} = {a + b}")
# 출력: 3 + 4 = 7
- f-string은 formatted string literal의 줄임말로, 문자열 내에 중괄호 {}를 이용해 변수나 표현식을 직접 삽입할 수 있는 방법입니다.
- 문자열 앞에 f(또는 F)를 붙이고, 따옴표의 안의 중괄호 {} 안에 변수명, 수식, 함수 호출 등을 넣을 수 있습니다. 계산식도 중괄호 안에서 바로 처리할 수 있습니다.
728x90
📌 문제 해설
이 코드는 문자열 "abdcabcabca" 안에서 두 개의 패턴 "ab" (변수 p2) "ca" (변수 p1)가 각각 몇 번 나오는지 세는 함수 cnt를 정의하고, 그 결과를 이용해 최종적으로 ab3ca3이라는 문자열을 출력합니다.
- cnt(str, p2)와 cnt(str, p1) 함수가 호출되어 그 결과값을 받아옵니다.
- cnt(str, p2)는 전체 문자열 str에서 패턴 p2 (즉, "ab")가 몇 번 등장하는지를 계산합니다.
- cnt(str, p1)는 전체 문자열 str에서 패턴 p1 (즉, "ca")가 몇 번 등장하는지를 계산합니다.
- 함수 cnt(str, p)는 문자열 전체에서 패턴과 같은 길이만큼 잘라낸 부분 문자열을 하나씩 확인하고 만약 그 부분 문자열이 패턴과 같다면, 결과값 result를 1씩 증가시키는 역할을 합니다.
- 전체 문자열 str = "abdcabcabca" 의 길이는 11입니다. 패턴 "ab" 또는 "ca"의 길이는 2입니다. 따라서 반복문은 range(11 - 2 + 1) = range(10)와 같이 0부터 9까지 총 10회 반복합니다.
- sub = str[i:i+len(p)] 현재 인덱스 i에서 i+2까지의 문자열을 잘라냅니다. 이 sub가 우리가 찾고자 하는 패턴과 같은지 검사합니다. 같으면 카운터(result)를 1 증가시킵니다.
- f-string 안에서 f'ab{cnt(str, p2)}ca{cnt(str, p1)}'는 다음과 같이 작동합니다:
- 1. 먼저 "ab" 문자열을 만듭니다.
- 2. 이어서 {cnt(str, p2)} 부분이 계산되어 3으로 대체됩니다.
- 3. 그 다음 "ca" 문자열을 이어 붙입니다.
- 4. 마지막으로 {cnt(str, p1)} 부분이 계산되어 3으로 대체됩니다.
따라서 최종적으로 구성되는 문자열은 "ab" + "3" + "ca" + "3", 즉 **"ab3ca3"**가 됩니다.
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
728x90
반응형