n, k = map(int, input().split())
idx = 0
res = [] #len(res) 는 a의 개수 , a의 인덱스가 들어갈거임
cnt = 0
bcnt = n - 1 # b의 개수
for i in range(n):
if cnt == k:
break
cnt -= len(res) #a가 한개 들어가므로 쌍의 개수가 1개씩 사라짐
bcnt -= 1 #a가 들어가므로 b의 개수가 줄어듬
for j in range(n, idx, -1):
if cnt + n - j == k: #k개의 쌍이 만들어지면 종료
idx = j #사실 의미없는줄..
res.append(j) # res에 A가 들어가는 인덱스
cnt += n - j #만들수있는지 체크하기위해서 cnt를 넣어줌
break
if idx == j - 1 and cnt + n - j <= k:
idx = j
res.append(idx)
cnt += n - j
elif cnt + n - j < k:
continue
elif cnt + n - j > k:
idx = j + 1
cnt += n - j - 1
res.append(j + 1)
break
if cnt != k:
print(-1)
else:
ans = ''
for i in range(1, n + 1):
if i in res:
ans += 'A'
else:
ans += 'B'
print(ans)
우선 B로 글자전체를 채운다고 가정
입력이 10 12 가 들어왔으면 10줄에 12개의 쌍이 필요함
B B B B B B B B B B 로 시작한다고 가정
A를 하나 삽입
B B B B B B B B B A 일경우에는 쌍이 0
B B B B B B B B A B 일경우에는 쌍이 한개
이럭식으로 쌍의 A의 인덱스를 왼쪽으로 계속 보내면서 쌍의 개수를 표현함
A B B B B B B B B B 이렇게 끝까지 보냈지만 쌍의 개수는 9 개
A가 들어갈 위치의 인덱스 1을 res배열에 삽입 그리고 A가 마지막에 들어간
위치를 기억하기위해서 idx에 A가 들어간 인덱스 1을 대입
쌍의 개수가 12개가 안되므로 A한개를 더 삽입
A B B B B B B B B A 이렇게 되면 앞에 A의 개수만큼 쌍이 사라지므로
앞에서 삽입했던 A의 개수만큼 쌍의 개수를 없애줌
총 쌍의 개수 - len(res)를 하면 9 - 1 해서 현재상태에선 쌍의 개수가 8개
그이후 A를 마지막으로 삽입했던 A의 인덱스 전까지 왼쪽으로 이동 , A를 마지막으로 삽입한 인덱스는 1 이기때문에 최대 2까지 이동
왼쪽으로 이동하다보면
A B B B B A B B B B 이 되었을때는
1번 A의 쌍의개수 8개 6번인덱스 A의 쌍의 개수 4개 , 총 12개가 되어서
반복문을 종료
그리고 res에는 1,6가 삽입이 되었으므로 10개 중에 1번째 , 6번째에 A를 넣어주면 총 쌍의 개수가 12개가 된다.
너무 어렵다...