[ BOJ / Python ] 12970번 AB

황승환·2022년 1월 5일
0

Python

목록 보기
78/498

이번 문제는 초기의 문자열 s를 B로 채운 뒤에 s의 각 문자들을 편하게 변경하기 위해 리스트로 변경하고 s를 순회하며 현재 위치의 문자를 A로 수정한 뒤 s를 순회하며 현재 위치의 문자가 A일 때 뒤에 존재하는 B의 갯수를 더하여 이 누적된 합과 k를 비교하는 방식으로 문자열 s를 수정하여 해결하였다.

  • n과 k를 입력받는다.
  • 문자열 s를 B n개로 구성된 문자열로 저장한다.
  • s를 리스트로 변경한다.
  • 매개변수 word를 가지는 함수 check를 정의한다.
    -> AB쌍의 수를 세기 위한 변수 cnt를 0으로 정의한다.
    -> word의 길이-1만큼 반복하는 i에 대한 for문을 돌린다.
    -> word[i]가 A일 경우,
    --> i+1부터 word의 길이-1까지 반복하는 j에 대한 for문을 돌린다.
    ---> 만약 word[j]가 B일 경우 cnt를 1 증가시킨다.
    -> cnt를 반환한다.
  • n만큼 반복하는 i에 대한 for문을 돌린다.
    -> s[i]를 A로 갱신한다.
    -> 만약 check(s)가 k와 같을 경우 반복문을 종료한다.
    -> 만약 check(s)가 k보다 클 경우 s[i]를 B로 갱신한다.
  • 결과 문자열을 저장하기 위한 변수 answer를 선언하고 s를 문자열로 만들어 answer에 저장한다.
  • 만약 answer가 A로만 이뤄져있거나 B로만 이뤄져있을 경우,
    -> k가 0이라면 answer를 출력한다.
    -> k가 0이 아니라면 -1을 출력한다.
  • answer가 A로만 이뤄져있지 않고 B로만 이뤄져있지 않을 경우 answer를 출력한다.

Code

n , k = map(int,input().split())
s = 'B'*n
s = list(s)
def check(word):
    cnt = 0
    for i in range(len(word)-1):
        if word[i] == 'A':
            for j in range(i+1,len(word)):
                if word[j] == 'B':
                    cnt += 1
    return cnt

for i in range(n):
    s[i] = 'A'
    if check(s) == k:
        break
    elif check(s) > k:
        s[i] = 'B'

answer = "".join(s)
if answer=='B'*n or answer=='A'*n:
    if k == 0:
        print(answer)
    else:
        print(-1)
else:
    print(answer)

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글