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

문제 이름이 Hello World! 다. 뭔가 반가워서 시도했는데 문제도 되게 재밌는 문제다.

문제를 고민하다가 어차피 반복에 들어가는 범위가 0~10까지 밖에 안되므로 여러번 충접해도 1억 이내에 계산할수 있다.

(파이썬은 보통 1초에 1억번 계산)

그래서 완전탐색(브루트포스)으로 경우의 수를 다 훓으면서 풀었다.

 

import sys
input = sys.stdin.readline
N = int(input())
def Sol():
  for h in range(1,10):
    for e in range(10):
      if h == e:
        continue
      for l in range(10):
        if l == h or l == e:
          continue
        for o in range(10):
          if o == h or  o == e or o == l:
            continue
          else:
            hello = (10000*h + 1000*e + 100*l + 10*l + o)
          for w in range(1,10):
            if w == h or w == e or w == l or w == o:
              continue
            for r in range(10):
              if r == h or r == e or r == l or r == o or r == w:
                continue
              for d in range(10):
                if d == h or d == e or d == l or d == o or d == w or d == r:
                  continue
                else:
                  world = (10000*w + 1000*o + 100*r + 10*l + d)
                hello_world = hello + world
                if hello_world == N and N < 100000:
                  print("  ", hello, sep = "")
                  print("+ ", world, sep = "")
                  print("-------")
                  print("  ", N, sep= "")
                  sys.exit()
                elif hello_world == N and N >= 100000:
                  print("  ", hello, sep = "")
                  print("+ ", world, sep = "")
                  print("-------")
                  print(" ", N, sep= "")
                  sys.exit()
  print("No Answer")

if __name__ == "__main__":
  Sol()

 

 

문제가 재밌어서 다른 사람들은 어떻게 풀었나 보니까...급 진지해지면 반성했다.

백준 다이아님이 푸신 코드를 봤는데...  정말 효율적으로 잘 짜셨다.

(실딱이가 눈물을 흘리는 순간...ㅠ)

그 분의 알고리즘을 이용하여 다시 코드를 짰다...

import sys
input = sys.stdin.readline
N = int(input())
def Sol():
  for h in range(10000,100000):
    w = N - h
    h = str(h); w = str(w)
    if len(w) == 5 and h[2] == h[3] == w[3] and h[4] == w[1] and len(set(w+h)) == 7:
      if N < 100000:
        print("  ", h, sep = "")
        print("+ ", w, sep = "")
        print("-------")
        print("  ", N, sep= "")
        sys.exit()
      else:
        print("  ", h, sep = "")
        print("+ ", w, sep = "")
        print("-------")
        print(" ", N, sep= "")
        sys.exit()
  print("No Answer")

if __name__ == "__main__":
  Sol()

 

시간이 확 줄어든 것을 한번에 알 수 있다...

 

정말 열심히 해야겠다고 또 다짐한다.

루오