알고리즘(Python)/백준

210524 [백준] 생태학(4358) / A와B(12904) / 회문(17609)

제이드Jade 2021. 5. 26. 13:18
생태학(4358)

#sorted(Counter(trees).keys()) 는 리스트형태가 됨    

#tree_count=Counter(sys.stdline.read().split('\n')[:-1]) / sum(tree_count.values())    =>코드 단축!
#sorted는 밑에 for문에서 for tc in sorted(tree_count.keys())하면 되고 
  이는 키의 리스트 형태이므로 tree_count[tc]로 접근하면 됨.
# print(key,"%.4f"%(trees[key]/N*100)) => 나무 이름은 조작이 필요 없으므로 쌍따옴표로 가두지 않아도 됨

 

 

import sys
from collections import Counter

trees=Counter(sys.stdin.read().split('\n')[:-1])

N=sum(trees.values())

for key in sorted(trees.keys()):
    print(key,"%.4f"%(trees[key]/N*100))

A와B(12904)

역발상! 꾀돌이인 나에게는 쉬운 접근이었지만 생각하는데 오래 걸릴 수도 있겠구나 싶었던 문제 

코드 왜 짤리는건데.. 티스토리.. 일 안하나


회문(17609)

#앞과 끝을 같은 변위 만큼 뗄 때 str[i:-i] <<이런 방식을 쓰려고 할 수 있는데 i=0일 땐 문자열이 탄생하지 못하므로 이 방식은 쓰지 말아야 함. 그냥 len(str)를 이용하는걸로..

#인덱스 i번째 부터/까지 회문인지 검사할땐 str[i:]==str[i:][::-1] / str[:-i]==str[:-i][::-1]를 쓰면 된다. 

 

 

import sys
N=int(input())

for _ in range(N):
    str=sys.stdin.readline().strip()
    if str==str[::-1]:
        print(0)
        continue

    code1=0
    for i in range(len(str)//2):
        if str[i]!=str[-(i+1)]:
            check=str[i:len(str)-i]
            if check[1:]==check[1:][::-1] or check[:-1]==check[:-1][::-1]:
                code1=1
            break
    print(1) if code1==1 else print(2)