백준 1439번 뒤집기 문제

 

입력값이 0 또는 1밖에 없으니 0이나 1중 하나를 선택하여 split 해준다.

 

1을 split 했다고 가정했을 때

0011100010 -> '00', '', '000', '', '0'

이 되는데 이때 전체 숫자 수 에서 ''의 수를 카운트해서 빼주면 된다.

 

이때 0011100010보다 1100011101이 더 작을수가 있기에

그 경우의 수를 생각하여준다.

s = input()
s2 = ''

for i in s:
    if i == '0':
      s2 += '1'
    else:
        s2 += '0'

a = s.split('1')
b = s2.split('1')
result = min((len(a) - a.count('')), (len(b) - b.count('')))
print(result)

 

 

코로나 2차 접종 후 5개월이 지난 시점 날라온 3차 접종 안내 문자!

 

 

 

 

사전 예약 누리집을 통해 잽싸게 예약을 해 오늘 (21/12/08) 접종을 받았습니다.

 

1~3차 전부 화이자로 맞았고, 글을 쓰고 있는 지금 (21/12/08 23:54) 까지는 아직 특별한 이상증세는 없고

조금의 무기력감과 몸 근육통이 있네요

 

백신을 크게 신봉하거나 패스가 없으면 살 수 없겠다! 는 아니지만, 만약을 대비하여

 

나 보다는 내 가족과 내 주변인들을 위해 빠르게 접종하였습니다.

 

다들 코로나 조심하시고, 건강하셨으면 좋겠습니다!

 

접종 30분 뒤 ~ 3시간 : 약간의 어지럼증

접종 3시간 뒤 ~ : 약한 수준의 전신 무력감과 근육통증

접종 26시간 뒤  ~ :  자고 일어나니 두통과 전신에 심한 근육통/관절통, 무기력감

접종 30시간 경과 ~ : 쌍화탕 한병 먹고 잤더니 두통은 좀 가셨지만 경미한 근육/관절통과 무기력감 남아있음 차차 나아질 것 같음

접종 2일 경과 ~ 현재 : 이상하게 접종받은 반대팔 (오른팔)이 마치 근육 안쪽이 엄청 아프다. 뭐랄까 염증이 생기고 벽돌을 올려놓은 느낌이랄까.. 차차 나아지고 있긴 하다.

백준 1715번 카드 정렬하기 문제

 

 

n = int(input())
data = []
for _ in range(n):
    data.append(int(input()))
data.sort()

if len(data) == 1:
    print(data[0])
    exit()

result = 0
result += data[0] * (len(data) - 1)
for i in range(1, len(data)):
    result += data[i] * (len(data) - i)
print(result)

최초 코드

 

import heapq
n = int(input())
data = list(int(input()) for _ in range(n))
heapq.heapify(data) # heapify를 통해 기존 리스트를 heap으로 변환
result = 0

while len(data) != 1:
    num1 = heapq.heappop(data)
    num2 = heapq.heappop(data)
    result += num1 + num2
    heapq.heappush(data, num1 + num2)
print(result)

최종 코드

 

최종 코드 제출

 

 

최초에는 데이터 값들의 연속성을 발견하여

 

n

n - 1 / n - 1

n - 1 / n - 1 / n - 2

n - 1 / n - 1 / n - 2 / n -3

n - 1 / n - 1 / n - 2 / n - 3 / n - 4 

.....................

 

을 기본항으로 문제를 풀어보려 했으나

 

우리가 구해야하는건 최소의 값

즉 데이터를 정렬해서 제일 작은 두 항을 묶고, 그 항을 다시 리스트의 맨 앞으로 불러들여

또 다시 제일 작은 두 항을 묶어야 하는 문제였다 ( 1개가 남을 때 까지 )

 

원래는 heap을 사용하지 않고, list를 사용하여 풀려 했었다

pop(0)를 사용하여 x = pop(0), y = pop(0), data.append(x+y)

하지만 여러가지 한계에 봉착하게 되었다.

 

내일은 heap과 우선순위 큐에 대해서 다시 한번 공부하는 시간을 가져야겠다.

백준 1339번 단어 수학 문제

 

n = int(input())
num = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
dict_data = {'A': 0, 'B': 0, 'C': 0, 'D': 0, 'E': 0, 'F': 0, 'G': 0, 'H': 0, 'I': 0, 'J': 0
             , 'K': 0, 'L': 0, 'M': 0, 'N': 0, 'O': 0, 'P': 0, 'Q': 0, 'R': 0, 'S': 0, 'T': 0, 'U': 0
             , 'V': 0, 'W': 0, 'X': 0, 'Y': 0, 'Z': 0}
data = []
for _ in range(n):
    data.append(input())
data = sorted(data, key=lambda x: len(x), reverse=True)

for i in data:
    for j in i:
        if dict_data[j] == 0:
            dict_data[j] = num.pop(0)

result = []
for i in data:
    tmp = ''
    for j in i:
        tmp += str(dict_data[j])
    result.append(int(tmp))
print(sum(result))

최초 코드

 

n = int(input())
num = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
dict_data = {'A': -1, 'B': -1, 'C': -1, 'D': -1, 'E': -1, 'F': -1, 'G': -1, 'H': -1, 'I': -1, 'J': -1
             , 'K': -1, 'L': -1, 'M': -1, 'N': -1, 'O': -1, 'P': -1, 'Q': -1, 'R': -1, 'S': -1, 'T': -1, 'U': -1
             , 'V': -1, 'W': -1, 'X': -1, 'Y': -1, 'Z': -1, '!': 0}
data = []
for _ in range(n):
    data.append(input())
data = sorted(data, key=lambda x: len(x), reverse=True)

max_len = len(data[0])


for i in range(len(data)):
    if len(data[i]) != max_len:
        tmp = max_len - len(data[i])
        for _ in range(tmp):
            data[i] = '!' + data[i]

for i in range(max_len):
    for j in range(len(data)):
        if data[j][i] != '!':
            if dict_data[data[j][i]] == -1:
                dict_data[data[j][i]] = num.pop(0)

result = 0
for i in range(max_len):
    for j in range(len(data)):
        print(dict_data[data[j][i]] * (10 ** (max_len - i - 1)))
        result += dict_data[data[j][i]] * (10 ** (max_len - i - 1))
print(result)

두번째 코드

 

n = int(input())
result = 0
num = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
dict_data = {'A': 0, 'B': 0, 'C': 0, 'D': 0, 'E': 0, 'F': 0, 'G': 0, 'H': 0, 'I': 0, 'J': 0
             , 'K': 0, 'L': 0, 'M': 0, 'N': 0, 'O': 0, 'P': 0, 'Q': 0, 'R': 0, 'S': 0, 'T': 0, 'U': 0
             , 'V': 0, 'W': 0, 'X': 0, 'Y': 0, 'Z': 0, '!': 0}
data = []
for _ in range(n):
    data.append(input())
data = sorted(data, key=lambda x: len(x), reverse=True)
max_len = len(data[0])

for i in range(len(data)):
    if len(data[i]) != max_len:
        tmp = max_len - len(data[i])
        for _ in range(tmp):
            data[i] = '!' + data[i]

for i in range(len(data)):
    for j in range(max_len):
        dict_data[data[i][j]] += (10 ** (max_len - j - 1))

dict_data['!'] = 0
weights = []
for i in dict_data.values():
    if i != 0:
        weights.append(i)
weights.sort(reverse= True)

for i in weights:
    result += i * num.pop(0)
print(result)

최종 코드

 

매우 고단했던 문제.. 주어진 문자의 각 자리수를 맞추어

해당 자리수에 맞게 차례로 큰 숫자부터 부여하며 동시에 연산하려 했으나, 

abb

bb

bb

bb

bb

bb

bb

bb

 

등의 input에 에러가 발생된다.

 

따라서 코드를 아예 전환하여 각 알파벳별로 가중치를 두었다(자리의 수에 따라)

그 가중치를 기준으로 큰 숫자부터 부여하여 계산하니 해결되었다.

 

문제를 보고 풀이를 도출할 수 있는 사고력을 길러야 한다는 생각이 들었다.

배움이 모자라니 시야가 좁아진다.

다양한 풀이와 더 나은 코드를 위해서는 더 열심히 노력해야한다.

풀었다는 사실에 안주하지 말자. 더 나은 코드로 다시 한번 풀어 내 것으로 만들자.

 

+ Recent posts