정화 코딩

매일 문제 풀기 - 7월 넷째 주 본문

PS

매일 문제 풀기 - 7월 넷째 주

jungh150c 2023. 7. 18. 02:10

7/17. OX퀴즈 (백준 8958번)

 

https://www.acmicpc.net/problem/8958

 

#python

countNum = int(input())
count = 0

while (count < countNum) :
    data = list(input())
    count += 1

    totalScore = 0
    score = 0

    for i in range (0, len(data)) :
        if data[i] == 'O' :
            score += 1
        elif data[i] == 'X' :
            score = 0
        totalScore += score
    
    print(totalScore)

 

문자열을 리스트로 변환하는 법 data = list(input())

문자열을 " "로 잘라서 리스트로 변환하는 법 data = list(input().split(" ")) 아마도...

아무튼 맞힐 때마다 스코어 변수 1씩 증가시켜 주고 틀리면 초기화해서 문제 해결. (정답)

 


 

7/18. 수 정렬하기 2 (백준 2751번)

 

https://www.acmicpc.net/problem/2751

 

#python

n = int(input())
data = [0] * n  # 리스트 n만큼 0으로 초기화
# data = [0 for i in range(0, n)]  <-- 리스트 초기화의 또 다른 방법

for i in range (0, n) :
    data[i] = int(input())

data.sort()

for i in range (0, n) :
    print(data[i])

 

첫번째 방법! 리스트를 만들어 n만큼 0으로 채운 다음에 입력 받고 정렬했다. 정렬은 파이썬 내장함수 sort()를 사용했다. sort(), sort(reverse=False)가 오름차순 정렬이고 sort(reverse=True)가 내림차순 정렬이다. 참고로 sort나 sorted 함수는 충분히 최적화가 많이 되어 작성된 정렬 알고리즘이라서, 정렬 과정이 필요한 경우 부담없이 사용해도 좋다고 한다. 리스트를 n만큼 0으로 초기화하는 방법은 data = [0] * n 아니면 data = [0 for i in range(0, n)]. 근데 이렇게 하니까 시간 초과... (오답) 그래서 찾아보니 리스트를 미리 n만큼 만들어두는게 시간 낭비인 것 같음...

 

#python

n = int(input())
data = []

for i in range (0, n) :
    data.append(int(input()))

data.sort()

for i in range (0, n) :
    print(data[i])

 

그래서 두번째 방법에서는 빈 리스트를 만들고 append로 추가시켜줌. 근데 이렇게 해도 시간 초과가 뜬다. (오답) 참고로 리스트에 요소를 추가할 수 있는 함수는 append(), extend(), insert() 이렇게 3가지가 있다. 

 

#python

import sys

n = int(input())
data = []

for i in range (0, n) :
    data.append(int(sys.stdin.readline()))

data.sort()

for i in range (0, n) :
    print(data[i])

 

세번째 방법이자 마지막 방법!! 다시 찾아보니 input() 내장 함수보다 sys.stdin.readline()를 사용하는 것이 시간 절약에 도움이 된다고 한다. 둘의 차이점은 검색하면 더 자세히 나오겠지만 간단히 정리하면 다음과 같다. input() 내장 함수는 parameter로 prompt message를 받을 수 있고, 입력받은 값의 개행 문자를 삭제시켜서 리턴한다. 결론!! input() 내장 함수는 sys.stdin.readline()과 비교해서 prompt message를 출력하고, 개행 문자를 삭제한 값을 리턴하기 때문에 느리다. 따라서 백준에서 Python으로 문제를 풀 때는 아래와 같이 sys.stdin.readline()을 활용해서 입력을 받는 것이 좋다고 한다. 참고! sys.stdin.readline()를 사용하려면 import sys를 해야한다. 드디어 성공... (정답)

 


 

7/19. 알람 시계 (백준 2884번)

 

https://www.acmicpc.net/problem/2884

 

#python

h, m = map(int, input().split(" "))

m -= 45
if m < 0 :
    m += 60
    h -= 1

if h < 0 :
    h += 24

print(h, m)

 

뭐야 이거 뭔가 문제가 익숙해서 티스토리 찾아봤더니 예전에 C로 풀었었던 문제였다. 코드는 다 맞게 짰는데 제출만 안 한... 아마 백준에 답안을 제출하는 것에 무서움을 가지고 있었던 코린이 시절이었던 것 같다 ㅋㅋㅋㅋ 물론 지금도 코린이지만,,, 암튼 그래도 파이썬으로 다시 풀어봤다. (정답)

 


 

7/20. 나머지 (백준 30521번)

 

https://www.acmicpc.net/problem/3052

 

#python

data = [0] * 42
count = 0

for i in range (0, 10) :
    num = int(input())
    rem = num % 42
    data[rem] = 1

for i in range (0, 42) :
    if data[i] == 1 :
        count += 1

print(count)

 

리스트에 42개의 0을 채워놓고 해당하는 나머지가 나오면 그 값을 1로 바꿔준다. 1이 있는 개수를 세서 해결! (정답)

 

 

Comments