출처: https://meyouus.tistory.com/64 [정보 공유 - For Me For You For Us]
본문으로 바로가기


겨우겨우 풀었던 문제이다:

from cmath import phase
import re, sys

def split(s, p = re.compile(r'([+-]*\d+)')):
    return [e for e in p.split(s) if e]

complex_num = sys.stdin.readline().strip()

complex_num_list = split(complex_num)

if len(complex_num_list) == 1:
    print('%f\n%f' %(abs(complex(int(complex_num_list[0]), 0)), phase(complex(int(complex_num_list[0]), 0))))
elif len(complex_num_list) == 2:
    print('%f\n%f' %(abs(complex(0, int(complex_num_list[0]))), phase(0, complex(int(complex_num_list[0])))))
elif len(complex_num_list) == 3:
    print('%f\n%f' %(abs(complex(int(complex_num_list[0]), int(complex_num_list[1]))), phase(complex(int(complex_num_list[0]), int(complex_num_list[1])))))


split이라는 함수까지 정의해서 사용해야 할 정도로 힘들었다. 여기에는 다음과 같은 부분들이 있다:

  1. len(complex_num_list) == 1 는 입력 받은 복소수가 단순 숫자 일 경우, (ex - 12)
  2. len(complex_num_list) == 2 는 입력 받은 복소수가 단순 허수 일 경우, (ex - 23j)
  3. len(complex_num_list) == 3 는 입력 받은 복소수가 완전 복소수 일 경우, (ex - -1+2j)

이 세가지의 경우를 나누어서 구해야 했다.