문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드
import math
# n을 k진수로 변환한 값을 리턴
def change(n,k):
res = ""
while n != 0:
tmp = n % k
res = str(tmp) + res
n //= k
return res
# 소수인지 판별
def is_prime(n):
if n == 1:
return False
if n == 2:
return True
for i in range(2, int(math.sqrt(n)) + 1): # 2부터 n의 제곱근까지 확인
if n % i == 0:
return False
return True
def solution(n, k):
answer = 0
changed_num = change(n, k) # k진수로 변환된 수(문자열)
idx = 0
p = ""
if changed_num[0] == '0': # 첫 시작도 0P0 형태인 경우
idx += 1
for idx in range(len(changed_num)):
if changed_num[idx] == '0':
if p != "" and is_prime(int(p)):
answer += 1
p = ""
continue
p += changed_num[idx]
if p != "": # 끝부분이 0P인 경우
if is_prime(int(p)):
answer += 1
return answer
- 주어진 수 n을 k진수로 바꾸어 changed_num이란 문자열 변수에 저장한다.
- changed_num 문자열에 대하여 한 글자씩 살펴보며 0P0 형태를 찾는다. 0이 나오기 전까지의 문자들을 p 문자열에 하나씩 이어붙이는 방식을 사용했다. 이때 앞부분에서는 P0 형태와 뒷부분에서는 0P 형태도 가능하니 이것도 고려해주어야 한다.
- 0P0 형태를 찾았다면 P가 소수인지 판별한다. P가 소수가 맞다면 answer을 증가시킨다
나는
if p != "" and is_prime(int(p)):
여기서 처음에 p != "" 조건을 추가해주지 않아 오류가 났다. 0이 연달아 나오는 경우 p는 빈 문자열이라 int(p)를 하면 오류가 났었다.
'문제풀이 > 문자열' 카테고리의 다른 글
[Python/파이썬] 백준 20437번 문자열 게임 2 (0) | 2023.03.27 |
---|---|
[Python/파이썬] 백준 17413번 단어 뒤집기 2 (0) | 2023.03.25 |
[Python/파이썬] 백준 20291번 파일 정리 (0) | 2023.03.25 |
[Python/파이썬] 백준 9342번 염색체 (0) | 2023.03.25 |
[Python/파이썬] 백준 15829번 Hashing (0) | 2022.01.22 |