티스토리 뷰
내가 작성한 코드
N = int(input())
quize = []
result = []
for i in range(N):
quize = input()
result.append(list(quize))
for i in range(N):
sum = 0
score = 0
for j in range(0, len(result[i])):
if result[i][j] == 'O' and result[i][j-1] == 'O':
score += 1
sum += score
elif result[i][j] == 'O':
score = 1
sum += score
elif result[i][j] == 'X':
score = 0
print(sum)
*풀이
- 첫 접근 방식
1. 연속된 O 일 경우를 체크한다.
2. 연속된 O의 경우 score는 1씩 증가한다.
3. 연속된 O의 경우 총 점수를 더해준다.
4. X의 경우 score를 0으로 초기화한다.
- 접근 방식의 문제점
1. 연속된 O 일 경우를 체크한다.
ㄴ 연속된 값임을 확인하기 위해서 이전 값과 현재 값을 비교해야 한다고 생각했다.
result[i][j] == 'O' and result[i][j-1] == 'O'
ㄴ 비교할 필요가 없고 'O'일 때 score 증가만 해주면 간단하다. 'X'일 경우 score = 0으로 초기화만 해주면 해결된다.
if j == 'O':
score += 1
sum += score
elif j == 'X':
score = 0
2. 이미 입력값이 문자열이므로 입력값을 list로 변경할 이유가 없다. 새로운 배열에 입력값을 append할 필요가 없다.
result.append(list(quize)) => 삭제
4. 이중 반복문의 범위 체크
ㄴ 반복문의 범위를 result 배열의 길이만큼 반복하면 된다고 생각했다.
for j in range(0, len(result[i])):
ㄴ 범위 지정없이 파이썬의 전형적인 반복문으로 해결된다.
for j in quize:
*짧은 코드
N = int(input())
for i in range(N):
quize = input()
sum = 0
score = 0
for j in quize:
if j == 'O':
score += 1
sum += score
elif j == 'X':
score = 0
print(sum)
*느낀점
- 코드길이는 320B가 줄었지만 메모리는 똑같고 시간은 오히려 처음 작성한 코드가 더 빨랐다.
- 메모리와 가독성 모두를 잡을 수 있도록 노력해야겠다.
'Code > BackJoon' 카테고리의 다른 글
백준 11654번: 아스키 코드 [Python] (0) | 2022.01.26 |
---|---|
백준 2920: 음계 [Python] (0) | 2022.01.26 |
백준 2577번: 숫자의 개수 [Python] (0) | 2022.01.24 |
백준 11721번: 열 개씩 끊어 출력하기 [Python] (0) | 2022.01.24 |
백준 8393번: 합 [Python] (0) | 2022.01.24 |
- Total
- Today
- Yesterday
- 오른쪽정렬
- range특징
- 별찍기 -4
- 파이썬 오름차순 정렬
- 리눅스계정경로
- 백준2007년
- 별찍기 -3
- 백준1942
- 파이썬
- 파이썬 덧셈
- 파이썬 반복문
- 백준 2742
- 파이썬 내림차순 정렬
- 백준 별찍기
- reversed함수
- 백준11721
- 코딩테스트
- 파이썬 오른쪽정렬
- 파이썬 거꾸로
- 백준
- 리눅스계정
- 별찍기 -2
- 별찍기 -1
- 코테
- 백준2920
- 파이썬 find
- 백준2440
- 백준2441
- 코테준비
- 백준코테
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |