본문 바로가기
Problem Solving

[백준] 8958 OX 퀴즈 python 알고리즘

by DuncanKim 2022. 4. 17.
728x90

문제 8958. OX 퀴즈

 

1. 좋은 코드

a = int(input())
for i in range(a):
    b = input()
    data = list(b)
    result = 0
    k = 1
    for i in data:
        if i == "O":
            result += k
            k += 1
        else:
            k = 1
    print(result)

더 좋은 코드를 찾다 발견했다.

'data' 리스트, 2중 for문, 문자열을 특징을 활용해서 간결하게 각 케이스의 'O'의 개수인 result를 뽑아내고 있다.

 

2. 나의 접근과 발상

try_game = int(input())
ox_all_list = []

# X 기준으로 글자를 잘라 리스트로 저장
# filter 함수를 이용하여 ox_list의 공백을 제거
for i in range(try_game) :

    for j in range(try_game) :
        ox_list = list(input().split('X'))
        ox_list = list(filter(None, ox_list))
        ox_all_list.append(ox_list)

    for j in range(len(ox_all_list[i])) :
        cnt = ox_all_list[i].count('O')
        ox_list[i] = cnt

    sum = 0
    for k in range(len(ox_all_list[i])) :
        score = 0
        for j in range(len(ox_all_list[i])) :
            score = score + 1
            sum += score

    print(sum)

'O'만을 세면 되었기 때문에 'X'를 기준으로 해서 글자를 잘라 ox_list를 만들었다.

그렇게 되면, ox_list의 원소는 ['O', '', 'O' ...] 이런 식으로 나오게 된다. 그 후 공백으로 되어 있는 원소를 모두 삭제한다.

그런 다음, ox_all_list에  ox_list 전체를 원소로 가져다 넣는다. ox_all_list는 이차원 배열이 되는 것이다.

 

그다음 'cnt'에서 ox_all_list[i] (=ox_list) 안의 'O'의 개수를 센다..

 

그렇다. 풀다가도 길을 헤매었기 때문에 실패했다.

 

3. 부족한 부분

'O'만을 세면 되는데, 굳이 filter 함수까지 데려와서 불필요한 과정을 반복한 것이 실수였다.

문자열의 특징을 활용하고, list의 append를 충분히 활용하고,

반복과정이 꼭 필수적으로 들어가야 하는 곳에만 for문을 쓰면 더 좋았을 것이다.

 

아직 확장해나가는 단계이니, 기존에 알고 있는 기초지식을 활용하는 것도 좋지만,

생소하거나 어색한 개념의 특징을 활용해보는 경험의 폭을 넓히는 것도 필요하다는 생각을 할 수 있었다.

 

많이 풀어봐야겠다...

 

 

728x90

댓글