Coding/Baekjoon

[백준] 단계별로 풀어보기 - 5. 1차원 배열 (python3) (8958)

jir4vvit 2022. 1. 11. 22:08
깃허브 링크 : https://github.com/jiravvit/coding-test/tree/main/baekjoon/05_Array

 

이번에 파이썬 코딩을 해보면서 가장 많이 든 생각은. 이것도 있어..? 란 생각이다.

 

리스트의 요소들을 모두 더해주기도 하고(sum)

최댓값(max), 최솟값(min)을 찾기도 하고

심지어는 어떤 요소가 이 리시트에서 몇번째에 존재하는지도 알려준다(index) ㄷㄷ

이 리스트에 이런 요소가 몇개인지 개수도 세어줌(count)


또한 파이썬에는 중복을 포함하지 않고, 순서가 없는 set 자료형이 있다.

 

 

8958번 OX퀴즈 (링크)

 

8958번: OX퀴즈

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

www.acmicpc.net

나의 풀이

import sys

n = int(sys.stdin.readline())
data = []
for i in range(n):
    data.append(input())

score = 0
for d in data:
    tmp = list(d)
    for i in range(len(d)):
        if tmp[i] == 'O':
            if i > 0 and tmp[i-1] > 0:
                tmp[i] = tmp[i-1] + 1
            elif i == 0:
                tmp[0] = 1
            else:
                tmp[i] = 1
        else:
            tmp[i] = 0
    #print(tmp)
    for t in tmp:
        score += t
    print(score)
    score = 0

n에 인풋 입력할 개수를 int로 넣고

그 다음 for문으로 input()함수를 이용해서 입력받아서 data 리스트에 이어 붙인다.

['OOO', 'OX', 'XOX']

data는 뭐 이런식으로 되어있다.

 

그 다음 for문에서 저 data 리스트에서 하나씩 가져와서 tmp라는 리스트에 넣어준다.

['O', 'O', 'O']

['O', 'X']

['X', 'O', 'X']

 

그리고 이 요소의 개수(정확히는 data 리스트에서의 요소 길이)만큼 for문을 돌려주는데,

[1, 2, 3]

[1, 0]

[0, 1, 0]

이런식으로 점수로 변환하면 점수 계산하기 편할 것 같아서

'O'일 때, 연속되면 이 전에 있는 숫자에 +1을 해주고, 아니면 1을 넣어주었다.

'O'가 아닌 경우('X'인 경우)는 무조건 0을 넣어주었다.

 

그리고 마지막에 tmp 리스트에 있는 요소들을 다 더해주는데, 지금 보니깐 굳이 for문으로 돌리지않고 그냥 바로 sum함수를 써줘도 될 것 같다;;

 

남의 풀이 (출처 : https://pacific-ocean.tistory.com/75)

풀이 구글링을 하다가 너무나 짧고 간결한 코드를 발견해서 같이 소개해보려고 한다..

a = int(input()) 	# 개수
for i in range(a):
    b = input()		
    s = list(b)
    sum = 0
    c = 1
    for i in s:
        if i == 'O':
            sum += c
            c += 1
        else:
            c = 1
    print(sum)

개수를 입력받고 그 개수만큼 for문을 돌려주는데..ㅋㅋ

['O', 'O', 'O']

정말 간단하게.. 여기서 요소가 'O'이면 sum에 c를 더해주고 c를 1 증가시켜준다.

그런데 이때 X를 만나게 되면 c를 1로 재정의를 해준다.. ㄷㄷ

 

너무 간단해서 깜짝 놀랐다. 나도 이렇게 생각했으면 좋았을 걸...