Baekjoon 19948번 음유시인 영재

노그리·2022년 7월 6일
0

📑 Algorithm

목록 보기
11/15

💭 문제가 궁금하다면?

내가 시도(활용)한 방법

  • 시의 내용을 문자마다 아스키코드로 변환 후 순회
  • 특정 알파벳이 입력 가능한지 확인하기 위해서 alphabet 배열을 룩업 테이블처럼 활용
  • 순회하면서 체크해야할 사항
    • 직전(old)에 기록한 문자가 무엇인지(입력 횟수가 소모되지 않아서)
    • (새로운 문자 기록 순서라면) 기록 횟수가 남았는지
      • 문자
      • 띄어쓰기
def make_title(content, space, alphabet):
    old = 32
    i = 0
    N = len(content)
    title = ''

    while i < N:
        ascii = content[i]

        # 이전 기록과 다른 경우
        if old != ascii:

            # 스페이스 였을 때,
            if ascii == 32:

                # 입력 횟수가 남지 않았으면,
                if not space:
                    return -1   # 함수 종료

                # 남았다면
                space -= 1      # 입력 가능 횟수 차감
                old = ascii     # 이전 기록 갱신

            # 문자였을 때,
            else:

                # 소문자인 경우 대문자 코드로 변환(해당 알파벳 입력 가능한지 확인하기 위해 통일)
                if ascii >= 97:
                    ascii -= 32

                if not alphabet[ascii]:
                    return -1

                if old == 32:
                    title += chr(ascii)
                    content.append(ascii)
                    N += 1

                alphabet[ascii] -= 1
                old = content[i]

        i += 1

    return title


content = list(map(lambda x: ord(x), input()))
space = int(input())
alphabet = [0] * 65 + list(map(int, input().split()))

print(make_title(content, space, alphabet))

느낀 점

  • 오랜만에 알고리즘 한 문제를 온전히 풀어서 뿌듯했는데, 나름 시간 기록도 좋아 기분이 좋았다. 하지만 나와 같은 시간 기록을 가진 다른 사람의 코드를 봤을 때는 너무 간결해서...내가 잘못짰나...하는 생각이 들었다. 그러나 내가 생각한 대로 구현을 완성했다는 점과 내가 설계한 코드가 큰 디버깅 없이 패스했다는 점은 분명하고 그 점에서는 충분히 스스로에게 칭찬해줘도 된다고 생각했다. 2학기 더 바빠질 테지만...알고 놓치 말아야지
profile
자기소개가 싫어요

0개의 댓글