본문 바로가기
알고리즘 풀이/백준

[백준 13140] Hello World! (python)

by char_lie 2023. 4. 25.
반응형

https://www.acmicpc.net/problem/13140

 

13140번: Hello World!

N이 주어질 때 hello + world = N을 만족하는 서로 다른 한 자리 자연수(0 포함) d, e, h, l, o, r, w를 구해서 아래 그림과 같은 형태로 출력하는 프로그램을 작성하여라. 단, h와 w는 0이 될 수 없다.

www.acmicpc.net

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')

 

반응형

댓글