ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 16139번 (부분 합, ord())
    백준 with Python 2023. 1. 27. 20:31

    첫 번째 풀이 : 50점 (맞긴하지만 프로그램이 느림)

    같은 문자가 들어왔을 때 똑같은 과정을 반복하는 것은 너무 비효율이므로 누적합을 이용했다.

    a를 받을때마다 먼저 a라는 알파벳에 관해서 내가 문자열에서 세봤는지 검사하고, 안세봤으면 세본 후 답을 구하고, 세봤으면 이미 구한 리스트에서 답을 쉽게 도출해낸다.

    sys.stdout.write()는 print()와 비슷한데, 차이점은  1. 자동 줄바꿈 x,  2. str만 출력함 3. 빠름  이다.

    새로운 a를 받을 때마다 다시 세는 과정때문에 50점을 받았다. 세는 과정을 줄여야 한다.

     

    두 번째 풀이 : 100점

    첫 번째 풀이와 두 번째 풀이의 가장 큰 차이점은

    첫 번째 풀이는 두 번째와 같은 문자가 계속 들어올 땐 차이가 없지만 서로 다른 문자가 들어오면 그거에 관해서 계속 다시금 세줘야 하는데 두 번째 풀이는 한 번만 세면 다른 문자가 들어와도 안세고 쉽게 답을 낼 수 있다.

     

    예를 들어 첫 번째 풀이는 b가 들어오면 문자열에 b인가 아닌가?로 한번 세야하고 c가 들어오면 또 c인가 아닌가?로 또 세야하지만 두 번째 풀이는 처음부터 무슨 알파벳인가?로 한번만 세면 된다.

     

    내가 처음부터 두 번째 풀이를 하지 못한 이유는 ord(알파벳)-97을 하면 모든 알파벳을 0~25의 숫자로 관리 할 수 있다는 기술을 몰랐기 때문이다. ord()란 어떤 문자를 아스키코드 숫자로 바꿔준다. 소문자알파벳은 97~122이 아스키코드기 때문에 -97을 하면 0부터25의 숫자로 쉽게 다룰 수 있게 된다.

Designed by Tistory.