iteration 반복문을 계속 공부하며 다음 문제를 해결해 보자.
도전 과제: n개의 주차 공간을 관리 중인데, 어제 점유된 주차 공간을 기록하였고, 오늘도 기록하였다.
어제와 오늘 모두 점유된 주차 공간의 수를 표시하라.
입력: 입력은 세 줄이다.
1. 중차 공간의 수를 나타내는 n(정수, 1 <= n <= 100)
2. 어제 점유된 주차 공간 기록
3. 오늘 점유된 주차 공간 기록
2와 3은 각 주차 공간별로 한 문자씩 총 n개의 문자로 이루어진 문자열이다.
차가 있을 때는 C, 비어 있을 때는 .으로 나타낸다.
출력은 문제에서 이야기했듯이 어제와 오늘, 이틀 모두 점유된 주차 공간의 수이다.
그럼 이 문제에서 루프가 존재하는 곳은 어디일까? 아마도 어제 주차 공간을 전제 하에 오늘 주차 공간을 조사하는 형식이 되어야 할 것이다. 그런데 여기에서 단순히 한 문자열의 문자들을 반복하는 것은 다른 문자열의 동일한 위치의 문자를 찾는 데 도움이 되지 않기 때문에 인텍싱을 사용하는 새로운 형태의 for 루프를 사용한다.(고 책에 셜명되어 있다.)
인덱싱이란 문자열의 문자 위치를 나타내며 대괄호 [ ]로 표기한다. 프로그래밍 언어는 대부분 0부터 시작한다.
예를 들면 더욱 빨리 이해할 수 있을 것이다.
word = 'splore'라고 하자.
여기에서 주의할 점은, 빈 문자열에는 유효한 인덱스가 존재하지 않는다는 점이다. 또한 인덱스의 -1은 제일 오른쪽 문자이고 -2는 오른쪽에서 두 번째 문자... 이런 식으로 표기된다.
이 예제를 한번 풀어보자.
s = 'abcde'
t = s[0] + s[-5] + s[len(s) - 5]
print(t)
여기에서 s[0] 은 a 이고 s[-5] 역시 a, 그리고 len(s)는 5이므로 s[len(s) - 5]은 s[0]이므로 a이다. 즉, aaa 이다.
문제에서도 알 수 있듯, len(문자열의 길이)보다 큰 인덱스는 존재하지 않는다.
그렇다면 이제 범위 range 루프를 알아보자. range 루프는 다음과 같이 예를 들 수 있다.
range(5) 0 1 2 3 4
range(3, 7) 3 4 5 6
range(0, 10, 2) 0 2 4 6 8
range(6, 2, -1) 6 5 4 3
규칙이 보이는가? 하나씩 풀어 설명해 보겠다.
range(5) 0 1 2 3 4 --> 5까지 범위의 정수를 의미한다. 5는 표기하지 않는다.
range(3, 7) 3 4 5 6 --> 3에서 시작해서 7까지 범위의 정수를 의미한다. 7은 표기하지 않는다.
range(0, 10, 2) 0 2 4 6 8 --> 0에서 시작해서 10까지 범위의 정수를 나타내는데, 2는 증가 단위를 나타낸다.
range(6, 2, -1) 6 5 4 3 --> 6에서 시작해서 2까지 범위의 정수를 나타내는데, -1은 감수 단위를 나타낸다.
덧, 실제로 range() 값을 반환하려면 list()라는 함수를 사용해야 한다. 즉, list(range()).
문제를 풀기 위해 범위 기반 for 루프에서 범위 내 정수들을 인덱스토 사용하여 해당 인덱스의 문자를 처리할 수 있다. 즉, 다음과 같다.
물론 range 함수를 이용해서 이 문제를 풀 수 있지만, 선생님이 for char in yesterday:를 이용해서 풀어보라고 하셔서 숙제를 해 보았다.
'Python 배우기' 카테고리의 다른 글
[외계어 배우기] 반복문: 무한 루프(문제#8 Slot Machines) (0) | 2024.03.04 |
---|---|
[외계어 배우기] 반복문(문제#7 Data Plan) (1) | 2024.02.27 |
[외계어 배우기] 연습문제 (1) | 2024.02.24 |
[외계어 배우기] 문제#5 Three Cups (0) | 2024.02.22 |
[외계어 배우기] 반복문(문제#5 Three Cups) (0) | 2024.02.20 |