헥스스피크(Hexspeak)란 무엇인가?
헥스스피크는 10진수를 16진수 문자열로 변환한 뒤, 숫자 0을 영문자 O로, 숫자 1을 영문자 I로 치환하여 만드는 재미있는 표현 방식입니다. 이렇게 만들어진 문자열이 마치 단어처럼 읽히는 경우가 있어 붙여진 이름입니다.
헥스스피크 표현이 유효하려면 결과 문자열이 반드시 다음 문자들만으로 구성되어야 합니다.
{"A", "B", "C", "D", "E", "F", "I", "O"}
문제 정의
10진수 정수 N을 나타내는 문자열 num이 주어졌을 때, N의 헥스스피크 표현을 구하는 것이 목표입니다. 만약 변환 결과가 유효하지 않다면 "ERROR"를 반환해야 합니다.
예를 들어 num = "257"이라면 출력은 "IOI"가 됩니다. 257을 16진수로 변환하면 101이고, 여기서 1을 I로 바꾸면 IOI가 되기 때문입니다.
해결 접근 방법
이 문제는 다음 단계를 통해 해결할 수 있습니다.
- x := 입력 숫자의 16진수 표현
- ans := 빈 문자열로 초기화
- 매핑용 딕셔너리 생성: {10: 'A', 11: 'B', 12: 'C', 13: 'D', 14: 'E', 15: 'F', 1: 'I', 0: 'O'}
- x의 각 자릿수 i에 대해:
- i가 딕셔너리 d에 존재하면 ans에 해당 문자를 추가
- 존재하지 않으면(즉, 2~9 사이의 숫자가 포함되면) 즉시 "ERROR" 반환
- 모든 자릿수 처리 후 ans 반환
파이썬 구현 예제
아래 코드를 통해 더 명확하게 이해할 수 있습니다.
class Solution(object):
def convertToHex(self, n):
res = []
while n > 0:
res.append(n % 16)
n //= 16
return res[::-1]
def toHexspeak(self, num):
x = self.convertToHex(int(num))
ans = ""
d = {10:"A", 11:"B", 12:"C", 13:"D", 14:"E", 15:"F",0:"O",1:"I"}
for i in x:
if i in d:
ans += d[i]
else:
return "ERROR"
return ans
ob1 = Solution()
print(ob1.toHexspeak("659724"))코드 동작 원리
convertToHex 메서드는 나눗셈과 나머지 연산을 반복하여 10진수를 16진수 자릿수 리스트로 변환합니다. 각 자릿수는 낮은 자리부터 계산되므로, 마지막에 [::-1] 슬라이싱으로 순서를 뒤집습니다.
toHexspeak 메서드는 변환된 자릿수들을 딕셔너리 d를 통해 대응하는 문자로 매핑합니다. 이때 2부터 9 사이의 숫자가 하나라도 등장하면 해당 값은 유효한 헥스스피크가 될 수 없으므로 "ERROR"를 반환합니다.
입력 및 출력 확인
입력
"659724"
출력
"AIIOC"
659724를 16진수로 변환하면 A110C가 됩니다. 여기서 1은 I로, 0은 O로 치환되어 최종적으로 "AIIOC"라는 유효한 헥스스피크 문자열이 완성됩니다.