타노스

 

내코드

from sys import stdin

# 사전순 가장 빠른 것을 출력해야 하기 때문에
# 1은 왼쪽에서 부터 삭제, 0은 오른쪽에서부터 삭제
s = stdin.readline().strip()

count0 = s.count("0")//2
count1 = s.count("1")//2

while count0 > 0 or count1 > 0:
    if count1 > 0:
        idx1 = s.index("1")
        s = list(s)
        s[idx1] = ''
        s = "".join(s)
        count1 -= 1
    if count0 > 0:
        idx0 = s.rindex("0")
        s = list(s)
        s[idx0] = ''
        s = "".join(s)
        count0 -= 1

print("".join(s))
728x90

영단어 암기는 괴로워

 

20920번: 영단어 암기는 괴로워

첫째 줄에는 영어 지문에 나오는 단어의 개수 $N$과 외울 단어의 길이 기준이 되는 $M$이 공백으로 구분되어 주어진다. ($1 \leq N \leq 100\,000$, $1 \leq M \leq 10$) 둘째 줄부터 $N+1$번째 줄까지 외울 단

www.acmicpc.net

 

내 코드

from sys import stdin

N, M = map(int, stdin.readline().split())
# print(N, M)
dicList = []
dic = {}


for _ in range(N):
    word = stdin.readline().strip()
    if len(word) >= M:
        dicList.append(word)
# print(dicList)

for word in dicList:
    if not word in dic:
        dic[word] = 1
    else:
        dic[word] += 1

keys = dic.keys()
# print(dic)
dic = sorted(dic.items(), key=lambda x: (-x[1], -len(x[0]), x[0]))
for word, count in dic:
    print(word)
728x90

줄세우기

 

10431번: 줄세우기

초등학교 선생님 강산이는 아이들을 데리고 단체로 어떤 일을 할 때 불편함이 없도록 새로 반에 배정받은 아이들에게 키 순서대로 번호를 부여한다. 번호를 부여할 땐 키가 가장 작은 아이가 1

www.acmicpc.net

 

내 코드

from sys import stdin

T = int(stdin.readline().strip())

for _ in range(T):
    arr = list(map(int, stdin.readline().strip().split()))
    num = arr[0]
    arr = arr[1:]

    newArr = []
    count = 0

    for a in arr:
        if len(newArr) == 0:
            newArr.append(a)
        else:
            for idx in range(1, len(newArr)+1):
                if newArr[-idx] > a:
                    count += 1

                    if idx == len(newArr):
                        newArr.insert(0, a)
                else:
                    if idx == 1:
                        newArr.append(a)
                        break
                    else:
                        # print(a, idx)
                        newArr = newArr[:-(idx -1)] + [a] + newArr[-(idx - 1):]
                        break
        # print(a, newArr, count)
    print(num, count)
728x90

등수 구하기

 

1205번: 등수 구하기

첫째 줄에 N, 태수의 새로운 점수, 그리고 P가 주어진다. P는 10보다 크거나 같고, 50보다 작거나 같은 정수, N은 0보다 크거나 같고, P보다 작거나 같은 정수이다. 그리고 모든 점수는 2,000,000,000보

www.acmicpc.net

내 코드

from sys import stdin

# N 주어질 리스트 길이
# S 태수 점수
# P 랭킹 순위 수

N, S, P = map(int, stdin.readline().split())
scores = []

# 점수 리스트 세팅
if N > 0:
    scores = list(map(int, stdin.readline().split()))

scores.append(S)
scores.sort(reverse=True)

ranks = []
for idx in range(len(scores)):
    if idx == 0:
        ranks.append(1)
    elif idx != 0 and scores[idx-1] == scores[idx]:
        ranks.append(ranks[-1])
    else:
        ranks.append(len(ranks) + 1)

rank = -1
if len(ranks) <= P:
    index = scores.index(S)
    rank = ranks[index]
else:
    index = scores.index(S)
    rank = ranks[index]

    # 등수가 P와 같을 때 동점자 있는지 확인
    if rank == P and ranks.count(rank) > 1:
        rank = -1

    if rank < P < ranks.count(rank) + len(ranks[:index]):
        rank = -1

    # rank 가 P보다 큰 경우
    if rank > P:
        rank = -1

# print(ranks)
print(rank)
728x90

+ Recent posts