1356번: 팀 이름 정하기 (브론즈1, 구현)
문제
정답
리스트 원소들 곱해서 비교하는 문제!
비교적 쉬운 단순 구현 문제였다. 3번만 시도하고 맞추어서 너무 행복하다!!!
(내 정답 풀이)
1. N을 앞부분 숫자와 뒷부분 숫자를 인덱싱해서 나눈다. int도 리스트형태로 인덱싱할 수 있다. 유의할 점은 range범위!
나는 더 직관적으로 1부터 마지막len(N)까지로 했는데, 뜻만 같으면 모두 가능하다.
2. 각 리스트 값 for문으로 곱해주기
3. A와 B가 같다면 yes=1.
4. for문에서 N을 모든 경우로 나눈 후에도 yes=1이면 yes 출력 아니면(한개도 A와 B가 같은 경우가 없는 경우) no출력
# 내 정답
N = int(input()) # 입력값
yes = 0 # 유진수인 경우
for i in range(1,len(N)):
a = N[:i] #앞부분 숫자
b = N[i:] #뒷부분 숫자
A = 1
B = 1
for j in a: #앞부분 리스트 원소 한개씩 곱하기
A *= int(j)
for k in b: #뒷부분 리스트 원소 한개씩 곱하기
B *= int(k)
if A == B : #곱한 값이 같으면 yes를 1로 덮어씌우기
yes = 1
if yes >= 1: # 유진수인 경우가 한 개 이상 있으면
print("YES")
else: # 한개도 없는 경우
print("NO")
<내가 생각하지 못한 아이디어>
1. N을 인덱싱하여 a와 b로 저장하지 않고, 바로 for문으로 곱해준 형태
(개인적으로 내 코드 방식이 더 직관적인 것 같다.)
2. 곱한 값이 같다면 1을 출력하고 더이상의 검증은 진행하지 않아도 되기 때문에, break 해주었다. 코드 수행 시간이 압도적으로 줄어든다. 괜히 끝까지 할 필요가 없었다!
3. 변수명을 left, right로 한 건 좋은 아이디어 같다. 다음에는 변수명에 신경써줘야겠다.
# 보통 사람들의 정답
N = input()
yes = 0
for i in range(len(N)-1):
left = right = 1
for j in range(i+1):
left *= int(n[j])
for k in range(i+1,len(N)):
right *= int(n[k])
if left == right:
print("YES")
yes = 1
break
if yes == 0:
print("NO")
#같은 의미
#print("YES" if yes else "NO")
공부한 내용
1. 리스트 곱하기
리스트 원소를 합하는 건 sum(a)로 가능하지만
곱하는 건 for문이 필요하다. 1인 ans에 arr를 0부터 순차적으로 곱해준다.
arr = [1,2,3,4,5]
ans = 1
for n in arr:
ans*= n
print(ans)
2. range, 인덱싱 다시 상기!
range(1,4) => 1,2,3,4
N = ['1','2','3','4']
N[:k] => 0+1부터 k번째 까지 ['1','2']
N[k:] => k+1부터 마지막까지 ['3','4']
range(len(N)-1) == range(0,len(N)-1) == range(1,len(N))
레퍼런스
- 리스트 곱하기
- 정답 깃허브
'Algorithm > 구현' 카테고리의 다른 글
[Python3] 백준 1373번 2진수 8진수 (0) | 2023.01.10 |
---|---|
[Python3] 백준 1357번 뒤집힌 덧셈 (0) | 2023.01.09 |
[Python3] 백준 1296번 팀 이름 정하기 (0) | 2023.01.06 |
[Python3] 백준 1292번 쉽게 푸는 문제 (0) | 2023.01.05 |
[Python3] 백준 1268번 임시 반장 정하기 (0) | 2023.01.05 |
댓글