문제
소윤이는 성필이에게 단단히 화가 났다. 성필이가 자꾸 소윤이의 이름을 놀리는 것이다!
극대노한 소윤이는 이름에 대해 많은 검색을 하던 도중 "이름점수"라는 것을 발견하게 된다. 이름 점수란, 알파벳 하나하나에 점수가 있고 이름에 들어가는 모든 알파벳 점수를 합한 것이라고 한다. 예를 들어 이름이 SUNG PIL 이라면,
- A = 1점
- B = 2점
- C = 3점
- ...
- Z = 26점
인 점수판에 따라 S(19)+U(21) + N(14) + G(7) + P(16) + I(9) + L(12) = 98점이다. (즉, 점수는 알파벳 순서이다)
소윤이는 SO YOON이므로 S(19) + O(15) + Y(25) + O(15) + O(15) + N(14) = 103점으로 성필이보다 "이름점수"가 높았다! 그 사실을 알아챈 소윤이는 성필이에게 자신이 "이름점수"가 더 높다는 것을 전했고 성필이는 아직 충격에서 헤어나오지 못했다고 한다.
이제 소윤이는 사람의 이름을 볼 때 마다 "이름점수"를 계산해본다. 하지만 너무나 많은 사람을 만나기 때문에 계산하기가 귀찮다! 귀찮아진 소윤이를 위해 "이름점수"를 계산하는 프로그램을 만들어 주자.
입력
첫 번째 줄에 이름의 길이가 주어진다. 길이는 100자 이하이다
두 번째 줄에 이름이 띄어쓰기 없이 대문자로 주어진다.
import sys
sys.stdin.readline()
name = sys.stdin.readline().strip()
score_map = {
'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5, 'F': 6, 'G': 7, 'H': 8, 'I': 9, 'J': 10,
'K': 11, 'L': 12, 'M': 13, 'N': 14, 'O': 15, 'P': 16, 'Q': 17, 'R': 18, 'S': 19,
'T': 20, 'U': 21, 'V': 22, 'W': 23, 'X': 24, 'Y': 25, 'Z': 26
}
total_score = 0
for char in name:
total_score += score_map[char]
print(total_score)
1. 첫줄을 읽음 ( 필요없는 정보이므로 변수에 저장 안함)
2. 그 다음줄을 읽고 공백을 제거한 후 name에 저장 ( .strip() : 공백 제거 )
3. 알파벳별 점수표를 정의한 딕셔너리 score_map을 만듦
4. 총 점수를 저장할 변수 total_score을 0으로 초기화
5. name에 있는 한글자씩 돌면서 score_map에서 해당 딕셔너리에 저장된 값을 total_score에 더함
6. 반복이 끝난 후 최종적으로 total_score를 출력

문제
단어에 숫자가 숨어있다. 이 숫자를 히든 넘버라고 한다. 알파벳 대/소문자와 숫자로 이루어진 단어가 주어졌을 때, 모든 히든 넘버의 합을 구하는 프로그램을 작성하시오.
단어와 히든 넘버는 아래와 같은 성질을 갖는다.
- 연속된 숫자는 한 히든 넘버이다.
- 두 히든 넘버 사이에는 글자가 적어도 한 개 있다.
- 히든 넘버는 6자리를 넘지 않는다.
입력
첫째 줄에 단어의 길이 n (1 ≤ n ≤ 5,000,000)이 주어진다. 둘째 줄에는 단어가 주어진다. 단어는 알파벳 대/소문자와 숫자(0-9)로 이루어져 있다.
import sys
sys.stdin.readline()
word = sys.stdin.readline().strip()
current_number = ""
total_sum = 0
for char in word:
if '0' <= char <= '9':
current_number += char
else:
if current_number:
total_sum += int(current_number)
current_number = ""
if current_number:
total_sum += int(current_number)
print(total_sum)
1. 첫줄을 읽음 ( 필요없는 정보이므로 변수에 저장 안함)
2. 그 다음줄을 읽고 공백을 제거한 후 word에 저장 ( .strip() : 공백 제거 )
3. 현재 찾고있는 히든 넘버를 문자열로 저장할 변수 current_number를 생성
4. 모든 히든 넘버의 합을 저장할 변수 total_sum을 0으로 초기화
5. word 안에 있는 한글자씩 돎
6. char이 0이상 9이하의 숫자라면 curren_number에 이어붙임
7. 그렇지 않고 만일 current_number가 있다면(이전에 저장된 숫자가 있다면) 정수로 변환해 total_sum에 더하고 curren_number를 초기화
8. 단어의 맨 끝이 숫자로 끝날 경우 마지막 숫자가 total_sum에 합산되어있지 않을 수 있음. 따라서 total_sum에 current_number를 정수로 변환해 더함
+) 숫자가 끝남을 확인하는 방법은 숫자 다음에 문자가 나왔을 때이므로 단어의 끝이 숫자면 7이 실행이 안됨
9. 최종적으로 total_sum을 출력

'SWLUG(2025) > Algorithm' 카테고리의 다른 글
| [2학기 7주차] 다음 소수, 수열 (0) | 2025.11.16 |
|---|---|
| [2학기 5주차] 이상한 곱셈, Shares (0) | 2025.11.05 |
| [2학기 4주차] 평균은 넘겠지, 최솟값 찾기 (0) | 2025.10.05 |
| [2학기 3주차] 수 정렬하기 3, 수열 (0) | 2025.09.30 |
| [2학기 2주차] 숫자의 합, 바구니 뒤집기 (0) | 2025.09.21 |