본문 바로가기
정글 2기/알고리즘

[백준_8958] 하, 기초(배열), OX퀴즈

by Dean30 2021. 8. 7.
728x90

[백준_8958] 하, 기초(배열),  OX퀴즈

 

Q) "OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다.

"OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.

OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.

첫 번 째 코드

처음에는 문제를 잘못 이해했다. 잘 읽고 이해하자..

 

두 번 째 코드

 if 조건문을 이용해 O, X 판별 + N 정수까지의 합 'ssum 함수'를 정의, 이용하여 풀었다.

마지막에 좀 헷갈렸던 게 OXOOOXOO 로 입력했을 때

조건문 루프에서 마지막 OO에서 else로 안 들어가 마지막 값이 result1에 들어가지 못 했다.

그래서 그냥 조건문 밖에 result1 += ssum(result)를 넣어 수동적으로 더해주었다.

 

수정 코드 1

OX를 받을 때 아예 처음부터 X를 기준으로 나눠서 list에 저장하는 방식을 이용하였다. - list(input().split('X'))

그리고 for 문 반복시 증가하는 변수 i나 x가 필요 없을 경우 _를 사용했다.

이 부분에서 개념이 좀 헷갈려 애 먹었다.

신기했던게 ox = ['OOOO', 'OOO', 'OO', '']일 때

len(ox[0])의 값이 1이 아니라 4였다는 것. 즉 문자열도 하나하나 쪼개 리스트화 시킨 것처럼 하나하나 개수를 카운팅 했다.

 

수정 코드 2

수정 코드 1이 더 간단하지만, 수정 코드 2에서는 ''.join()의 활용을 배울 수 있다.

ox = OOOXOOXOX 라 할 때,

ox1 = ['OOO', 'OO', 'O', '']

ox2 = ' '.join(ox1) = OOO OO O 이고

          ' '.join(ox1).split() = ['OOO', 'OO', 'O'] 이다

즉 join은 '' 사이 구분자를 이용하여 연속하는 문자열을 만든다.

 

31줄 x는 숫자가 아니라 리스트의 각 성분('OOO', 'OO', 'O')이 들어간다. 

for문에 좀 더 익숙해질 필요가 있겠다.

 

728x90

댓글