본문 바로가기
백준

백준 1431번 ( 시리얼 번호 )

by dragonDeok 2022. 2. 14.
728x90

문제)

다솜이는 기타를 많이 가지고 있다. 그리고 각각의 기타는 모두 다른 시리얼 번호를 가지고 있다. 다솜이는 기타를 빨리 찾아서 빨리 사람들에게 연주해주기 위해서 기타를 시리얼 번호 순서대로 정렬하고자 한다.

모든 시리얼 번호는 알파벳 대문자 (A-Z)와 숫자 (0-9)로 이루어져 있다.

시리얼번호 A가 시리얼번호 B의 앞에 오는 경우는 다음과 같다.

  1. A와 B의 길이가 다르면, 짧은 것이 먼저 온다.
  2. 만약 서로 길이가 같다면, A의 모든 자리수의 합과 B의 모든 자리수의 합을 비교해서 작은 합을 가지는 것이 먼저온다. (숫자인 것만 더한다)
  3. 만약 1,2번 둘 조건으로도 비교할 수 없으면, 사전순으로 비교한다. 숫자가 알파벳보다 사전순으로 작다.

시리얼이 주어졌을 때, 정렬해서 출력하는 프로그램을 작성하시오.

 

 

어려웠던 점)

- string 배열에 시리얼 번호들을 저장했는데 저장된 시리얼 번호에서 숫자일 때만 골라서 그 숫자들의 합을 구하는
  부분이 시간이 조금 걸렸다.

 

해결 방법)

- 문자는 아스키 코드이므로 문자가  '0' 과 '9' 사이일 때만 숫자이다. 그렇게 조건을 걸고 그 조건에 성립한다면
  숫자이기 때문에 그 값을 sum 변수에 더해준다. 이 때 string 변수의 안에 있는 숫자('9' 같은 문자)들을 더한 총합을
  구하려면 각 숫자에 해당하는 만큼 sum변수에 더해줘야 하는데 이 방법은 a[i] - '0' 으로 하면 아스키코드 값의 차이
  만큼이 그 숫자를 의미하게 되므로 이 값을 더해주면 된다.