boj 1522 [브루트포스]

돌멩e·2022년 6월 30일
0

알고리즘 뿌수기

목록 보기
3/17
post-thumbnail

boj 1522 - △

📍 생각 logic

문자열의 a의 개수만큼 슬라이딩 윈도우를 만들어 그 안의 (b의 개수가 최소) = (교환 횟수의 최솟값)

  1. 문자열에서 a의 개수만큼 슬라이딩 윈도우를 만든다.
  2. 인덱스 0부터 1씩 증가시키며 슬라이딩 윈도우 안의 b의 개수를 비교한다.
  3. b의 개수가 최소인게 정답

❗️ ERROR point

  1. 문자열이 원형이라고 인덱스가 다시 처음으로 넘어갈 때 슬라이싱으로 슬라이딩 윈도우를 만들려고 한 것
  2. 개념은 슬라이싱 윈도우지만 슬라이싱으로 안되니 나에게는 문자열 범위를 정해놓고 그 안에 b 개수를 카운트하는 방법을 참고할 수밖에 없었음

📌 문자열의 인덱스 끝에서 다시 인덱스 처음으로 갈 때

# solution 1
# i가 문자열의 끝이라면, (i+1) % len(문자열)은 그 다음 문자열[0], 첫번째 인덱스를 뜻한다.
i = (i+1) % len(문자열)

# solution 2
# 이번 코드

🔑 풀이

  • 슬라이딩 윈도우에 해당하는 부분을 for문을 돌려서 각 인덱스의 값이 b인지 확인 후, b의 개수를 비교하여 최소 b의 개수를 출력
s = input()

# s의 인덱스 0부터 a의 개수만큼의 문자열 중 b의 개수만큼 교환해야 됨
num_a = s.count('a')

# max나 min 배열에 넣지 않고 한번에 비교하기 - 큰 수 대입
Min = 99999999999999999

for i in range(len(s)):
    count = 0
    for j in range(i, i + num_a):
        over = j
        #j의 인덱스가 마지막보다 커지면 - solution 2
        if j >= len(s):
            over = j - len(s)
        if s[over] == 'b':
            count += 1
    # max나 min 배열에 넣지 않고 한번에 비교하기 - 비교
    Min = min(Min, count)

print(Min)

아이디어는 좋았는데 구현 능력이 쬐꼼 떨어져서 3시간 걸린 친구,,,

profile
돌이 되고 싶어요

0개의 댓글

관련 채용 정보