문제
"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다.
"OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.
OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.
문제 풀다가 안 풀려서 구글링 조금 했음(이중 for문)
풀이 과정
우선 점수의 규칙을 파악함. 수열인 것 같은데 자세히 모르겠음(챗지피티 피셜 삼각수열이라고 하네)
- 규칙 : O가 연속되면 O의 개수만큼 점수 획득. 1개일 경우에는 1점
예를 들어 2개 연속이면 2점 추가
연속된 0의 개수를 파악하기 위해 연속된만큼 리스트에 요소를 추가하였고 리스트 요소의 수를 통하여 점수 추가함
해설 (A를 N번 입략)
1. Z = [ ] 빈 리스트 생성, S = 0 다음 입력 데이터가 실행되면 점수 초기화
2. 문자열 A의 요소를 조건문을 통해 차례대로 검사 (O인지,X인지)
- O일 경우 Z에 "1"을 추가하고 Z의 길이만큼 점수를 추가(O가 연속된만큼 Z에 요소가 추가되고 그만큼 점수에 더함)
- X일 경우 Z를 초기화시켜서 연속된 O을 초기화
3. 외부 for문이 끝날 때마다 점수 출력(반복이 한 번 끝날 때 마다 점수 출력)
번외
S(점수)와 Z(연속된 0의 개수)를 for문 내에서 정의한 이유
1. S를 외부에서 정의하면 for문이 반복될 때 마다 값이 누적됨(독립적이지 못함)
- 최종 출력시 모든 입력데이터의 S값이 합쳐서 출력됨
2. Z를 외부에서 정의하면 이전의 입력값의 영향이 다음 입력값에 영향을 줄 수 있음
즉 초기화되지 않고 다음 for문이 실행되면 데이터에 오류가 생김
해결방법 - Z를 외부에서 정의했다면 for문이 끝나기전에 Z를 초기화하는 코드를 넣어야함
다른 분들의 답을 보니 코드는 다르긴 한데 해결 과정은 비슷했습니다.
다른분들은 변수를 정의하고 O이 연속될 때 마다 변수 +=1을 했네요.
저는 변수를 정의하는 대신 빈 리스트에 추가하는 식으로 문제를 푼 겁니다.
'파이썬 > 솔브닥 - 클래스1' 카테고리의 다른 글
[클래스1] 백준 2675번: 문자열 반복 파이썬 python (1) | 2024.11.13 |
---|---|
[클래스1] 백준 1152번: 단어의 개수 파이썬 python (0) | 2024.11.13 |