-
JUNGOL 실력키우기 1620: 전화번호 속의 암호보관함 2018. 6. 30. 17:41
자물쇠 사용자의 핸드폰 번호를 가지고 보다 기억하기 편하게 이를 암호로 만들려고 한다.
즉 자물쇠를 사면 처음에 숫자 두 개를 입력하는데 첫 번째 숫자는 각 자리에 더해질 숫자이고,
두 번째 숫자는 몇 번째 숫자 더미를 가지고 암호를 만들 것인가를 결정하는 것이다.
해당 더미 숫자에 각각 더해질 숫자를 더하면 이것이 암호가 된다.
자물쇠의 비밀번호를 만들어 내는 프로그램을 작성하라.
< 처리조건 >
(1) 핸드폰 번호, 각 자리에 더해질 숫자, 숫자 더미의 위치를 입력받는다.
(2) 입력된 핸드폰 번호에서, 각 숫자 더미사이의 구분은 하이픈(-)으로 하고, 번호는 0이상 9이하의 자연수만 들어온다.
(3) 숫자 더미는 앞에서부터 자동적으로 1번부터 매겨지며, 그 수의 제한은 없다. 즉 반드시 abc-defg-hijk 형태의 3개의 숫자더미를 가지는 전화번호만이 있는 것은 아니다.
(4) 원하는 숫자더미에서 각 자리의 숫자를 더한다. 이때 더한 값이 9를 넘을 경우에는 그 중 일의 자리 값만을 취한다.
(5) 각 숫자더미는 4자리를 넘어서는 안된다.
(6) 각 숫자 더미의 크기가 4자리가 안될 경우에는 전체를 4자리로 한 후, 앞에 그 비는 자리 수만큼 0을 붙인다.전화번호를 기억할 스트링과(s, s는 100자 이내의 스트링), 각 자리에 더해질 숫자(p, p는 1부터 9까지의 수), 숫자 더미의 번호(m)를 공백문자로 구분하여 입력받는다.
위의 입력된 전화번호 중에서의 원하는 더미에, 원하는 숫자가 더해진 후의 값을 출력한다. 처리조건에 맞지 않는 경우는 "INPUT ERROR!"를 출력한다.
[Copy] 111-2222-3412-5432 2 4
[Copy] 7654
[Copy] 11111-22-33 5 1
[Copy] INPUT ERROR!
이번 문제는 문제 자체를 애매하게 적어놓기도 해서 좀 헤맸습니다.
(5) 각 숫자더미는 4자리를 넘어서는 안된다. 이거를 혼자 오해해서 선택한 위치의 자리수가 4자리 이하여야 한다로 봤네요.
그리고 (6) 4자리가 안되는 경우 앞에 그 비는 자리수 만큼 0을 붙인다. 이거를 오른쪽에 붙였는데, 확인해보니 왼쪽에 붙이는게 맞네요.
요새 클래스를 이용하는 방법으로 최대한 만들어 보려고 하는데 뭔가 깔끔하게 떨어지지가 않네요.
흠... 역시 여기 저기 코드를 찾아서 보고 배우는게 가장 빠른것 같군요.
P.S.
검색하다보니 StringStream 이라는게 있네요. 이거를 이용하니 쉽게 문자열을 분리할 수 있습니다.
허허.. STL 수업으로 들을 때보다 따로 공부하면서 배우는게 더 많은 것 같은 느낌이 드는군요.
어쨋든 StringStream을 이용한 버전 코드도 올립니다.