각 문자가 연속해서 나타는 경우는 array[i] == array[i+1]
으로 확인해봐야겠다는 생각을 했다. 그런데, 떨어져서 나타나는 문자열은 어떻게 표현할지 명확히 떠오르지 않았다. 주변 사람의 코드를 보고 어떻게 작성해야할지 찾아보았다. 중간에 j < len(array)-1 and
를 선언한 이유는 현재 문자열과 다음 문자열을 비교하는 과정 중 마지막 과정은 범위가 초과하기때문에 선언했다.
나머지코드를 해석하면 만약, 현재 문자열과 다음문자열이 같으면 넘어가고(pass)
현재 문자열이 다음 문자열 안에 포함되어있으면 break
시키고 그것이 아니면 count
된다는 의미다.
또 다르게 작성한 코드를 봤는데, sorted
함수를 사용했다.
key = array.find
코드는 처음보는데 문자를 하나씩 끊어 정렬시킨 값과 원래의 리스트값이 같으면 count
시키는 코드였다.
자주 사용해야겠다.
n = int(input())
count = 0
for i in range(n):
array = input()
for j in range(len(array)):
if j < len(array)-1 and array[j] == array[j+1]:
pass
elif array[j] in array[j+1:]:
break
else:
count += 1
print(count)
n = int(input())
cnt = 0
for i in range(n):
array = input()
if list(array) == sorted(array, key=array.find):
cnt+=1
print(cnt)
이 문제를 가져온 이유는 다른사람의 숏코딩(short_coding)
을 보고 감탄했기 때문이다.
같은 결과가 나오는 코드인데 2줄밖에 사용하지 않았다니...
이왕이면 짧은 코드를 사용하는게 좋은 편이겠지?
# 내가 푼 코드
array = list(map(int, input().split()))
result = 0
for i in array:
result = (result + (i*i)) % 10
print(result)
# Pythonic 코드
import sys
input = sys.stdin.readline
array = [i*i for i in map(int, input().split())]
print(sum(array) % 10)
이 문제도 역시 숏코딩에 놀랐다.
지금 보니까 내가 너무 코드를 못 짰다고 느꼈다.
빙빙 둘러갈 생각하지말고 쉬운 방법을 생각해보자!
# 내가 작성한 코드
books = []
rest = 0
for i in range(10):
book = int(input())
books.append(book)
total = books[0]
for i in books[1:]:
rest = rest + i
result = total - rest
print(result)
# 다른사람이 푼 코드
first = int(input())
for i in range(9):
first = first - int(input())
print(first)
이번에는 정답판정을 받았지만 시간복잡도가 차이나는 코드를 가져왔다.
1번 코드는 입력 for문을 제외하면 2번 쓰였기 때문에 시간복잡도가 O(N^2)이고 2번코드는 입력 for문을 제외하면 1번쓰였기 때문에 시간복잡도가 O(N)이 된다.
입력 수가 커지면 시간초과 판정이 날 수 있으니까 for문은 웬만하면 줄이는 쪽으로 작성하자!
# 1번
T = int(input())
for i in range(T):
case = input().split()
number = int(case[0])
string = list(case[1])
for j in range(len(string)):
for k in range(number):
print(string[j], end='')
print()
# 2번
T = int(input())
for i in range(T):
n, s = input().split()
for j in range(len(s)):
print(int(n) * s[j], end='')
print()
이렇게 해서 구현문제를 풀어보았다.
아직 많이 남았다. 다음주까지는 쭉 구현문제를 풀 계획이다.
구현파트의 문제를 많이 풀수록 머리가 컴퓨터화(?) 되는것 같다.
쉽다고 생각하지말고 어떻게 코드를 효율적으로 짤 수 있을까를 고민하자.
이번 파트의 문제를 많이 푼다면 이를 응용한 문제가 많기때문에 지금보다 수월하지 않을까 생각한다.