https://www.acmicpc.net/problem/18129
문제
주어진 문자열을 주어진 기준 수를 이용하여 암호로 바꾸는 문제이다.
문자열에서 대소문자 구분없이 특정 알파벳이 기준 수 이상으로 연속되어 있다면 1, 미만이라면 0 으로 치환하고, 이미 치환된 적 있다면 그 구간을 삭제한다.
풀이
주어진 문자열에서 대소문자 구분없이 특정 알파벳이 연속되어 있는지 확인하려면 문자열의 하나의 문자와 그 다음 문자가 같은지 비교하면 된다. 단 문자열의 끝에 도달하면 비교할 문자가 없어지기 때문에 예외처리가 필요하다. 이 문제에서는 문자열이 모두 알파벳이기 때문에 비교하면 무조건 달라지는 숫자를 문자열 끝에 임의로 추가하여 사용하였다.
대소문자 구분을 피하기 위해서는 upper 이나 lower 을 활용하면 될 것 같다.
치환된적 있는 알파벳이라면 해당 구간을 삭제해야 하기 때문에 치환한 문자에 대해서는 저장해두어야 한다. 그리고 치환하기 전에 치환된 적이 있는지 확인하고 치환된 적이 있다면 삭제해주면 된다.
치환한 1, 0 을 새로운 문자열로 만들어서 출력하는 것이 편하기 때문에 아래 코드에서는 정답 문자열을 새로 만들어 사용하였고, 이미 치환된 적 있는 알파벳이라면 정답 문자열에 추가하지 않는 것으로 삭제를 대신하였다.
코드
string, k = input().split()
k = int(k)
string += '0'
memory = []
ans = ''
cumulative = 1
for i in range(len(string)-1):
if (string[i].upper() == string[i+1].upper()):
cumulative += 1
elif (string[i].upper() not in memory):
if (cumulative >= k):
ans += '1'
else:
ans += '0'
memory.append(string[i].upper())
cumulative = 1
else:
cumulative = 1
print(ans)
'Online Judge > Baekjoon' 카테고리의 다른 글
[Baekjoon 12683] Test Passing Probability (Small) | Python (0) | 2024.08.31 |
---|---|
[Baekjoon 3230] 금메달, 은메달, 동메달은 누가? | Python (0) | 2024.08.31 |
[Baekjoon 32174] 조커 찾기 2 | Python (0) | 2024.08.31 |
[Baekjoon 32173] 새치기 | Python (0) | 2024.08.31 |
[Baekjoon 22233] 가희와 키워드 | Python (0) | 2024.08.31 |