반응형
https://www.acmicpc.net/problem/13140
Hellow World 문제
숫자 값 N을 입력받고 h, e, l, o, w, r, d에 각각 0~9까지 숫자를 할당했을 때 hello+world = N이 되는 것을 찾는 문제
완전 탐색을 통해서 해결할 수 있었다.
📌 문제 접근 포인트
1. 각각의 h, e, l, o, w, r, d에 숫자를 넣어서 비교할 방법을 찾아보자.
2. 주어진 숫자 N은 hello + world의 합으로 정해져야 한다. 이때 hello의 값이 정해진다면, world는 N - hello로 값이 정해진다. 그렇기에 hello는 5자리 수이므로 10000 <= hello < 100000에서 탐색을 하면 된다.
3. 주어진 조건의 경우 중복되는 알파벳이 있다. 즉, x = hello의 숫자, y = world의 숫자라고 가정하면 x[2] = x[3] = y[3]의 조건을 만족해야 하고, x[4] = y[1]의 조건도 만족해야 한다.
4. hello와 world는 각각 5자리 수로 고정이다. 즉 h랑 w가 0인 경우가 나오면 안 되므로, N-hello가 5자리여야 한다.
5. h, e, l, o, w, r, d의 7개 알파벳이 전부 다른 숫자여야 하므로 hello+world의 숫자의 중복을 지우고, 이때의 길이가 7이면 중복이 없음을 알 수 있다.
7. 요구사항 조건에 맞게 출력하면 된다.
⚙️내가 푼 정답코드 1
import sys
N = int(sys.stdin.readline())
result ="No Answer"
for i in range(10000,100000):
x, y = str(i), str(N-i)
# y의 자리수가 5자리수여야하고, l 부분도 같아야하며, o 부분도 같고, 중복이 없다면
if len(y) == 5 and x[2]==x[3]==y[3] and x[4]==y[1] and len(set(x+y))==7:
result =f" {x}\n+ {y}\n-------\n {N:6}"
break
print(result)
⚙️ 내가 푼 정답코드 2
# 통과는 되지만 7중 for문과 8중 if문을 통과하는 연산을 통한 완전 탐색이므로
# 굉장히 시간이 많이 소요된다.
import sys
N = int(sys.stdin.readline())
for d in range(10):
for e in range(10):
for h in range(1,10):
for l in range(10):
for o in range(10):
for r in range(10):
for w in range(1,10):
if d != e and d != h and d != l and d != o and d!= r and d != w:
if e != h and e != l and e != o and e != r and e!=w :
if h != l and h != o and h != r and h!= w :
if l != o and l != r and l != w:
if o != r and o!= w:
if r != w:
x = str(h)+str(e)+str(l)+str(l)+str(o)
y = str(w)+str(o)+str(r)+str(l)+str(d)
if int(x)+int(y) == N:
print(' ',x)
print('+',y)
print('-------')
print(f" {N:6}")
exit()
print('No Answer')
반응형
'알고리즘 풀이 > 백준' 카테고리의 다른 글
[백준 15685] 드래곤 커브(python) (0) | 2023.04.25 |
---|---|
[백준 13909] 창문 닫기 (python) (0) | 2023.04.25 |
[백준 17103] 골드바흐 파티션 (python) (0) | 2023.04.23 |
[백준 14499] 주사위 굴리기(python) (0) | 2023.04.22 |
[백준 4779] 칸토어 집합 (python) (0) | 2023.04.21 |
댓글