본문 바로가기
Algorithm/구현

[Python3] 백준 1356번 유진수

by HANNI하니 2023. 1. 9.

1356번: 팀 이름 정하기 (브론즈1, 구현)

문제

 

1356번: 유진수

첫째 줄에 수 N이 주어진다. 이 수는 2,147,483,647보다 작거나 같은 자연수이다.

www.acmicpc.net

정답

리스트 원소들 곱해서 비교하는 문제!

비교적 쉬운 단순 구현 문제였다. 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)) 

 


레퍼런스

  • 리스트 곱하기
 

[Python] 리스트 요소 곱하기, 배열 원소들끼리 곱하기

목차 들어가며 리스트 요소들 전체의 합은 sum으로 구해지는데 리스트 요소들 끼리의 곱은 구해지지가 않는다. 그래서 해당 방법에 대해 알아보자. 총 3가지의 종류가 있다. for문 돌아가며 수행

chancoding.tistory.com

 

파이썬에서 배열의 원소의 곱을 구하는 3가지 방법

실수 배열에서 원소들의 곱을 구하는 방법을 파이썬식으로 해보자!

shoark7.github.io

  • 정답 깃허브
 

GitHub - yyeongeun/codingtest: 코딩테스트 공부

코딩테스트 공부. Contribute to yyeongeun/codingtest development by creating an account on GitHub.

github.com

 

댓글