문제

 

내가 작성한 코드 (틀림; 참고 블로그보고 작성함)
from collections import deque

def solution(bridge_length, weight, truck_weights):
    answer = 0
    trucks_on_bridge = [0] * bridge_length
    truck_weights = deque(truck_weights)
    while len(trucks_on_bridge):
        answer += 1
        trucks_on_bridge.pop(0)
        if truck_weights:
            if sum(trucks_on_bridge) + truck_weights[0] <= weight:
                trucks_on_bridge.append(deque.popleft(truck_weights))
            else:
                trucks_on_bridge.append(0)
    return answer

 

코드 설명
from collections import deque

> '큐'를 이용하기 위해서 deque 라이브러리를 볼러옴

 

def solution(bridge_length, weight, truck_weights):
    answer = 0
    trucks_on_bridge = [0] * bridge_length
    truck_weights = deque(truck_weights)
    while len(trucks_on_bridge):
        answer += 1
        trucks_on_bridge.pop(0)
        if truck_weights:
            if sum(trucks_on_bridge) + truck_weights[0] <= weight:
                trucks_on_bridge.append(deque.popleft(truck_weights))
            else:
                trucks_on_bridge.append(0)
    return answer

> trucks_on_bridge 변수는 bridge_length(다리 길이)만큼 0을 갖는 리스트 변수입니다.

> truck_weights 변수는 선입선출하기 위해서 deque() 함수를 적용하였습니다.

> while문을 사용하여 trucks_on_bridge 변수에 값이 없을 때까지 반복문을 진행시켰습니다.

> 진행 시마다 answer += 1을 시켜 시간을 구했습니다.

> trucks_on_bridge 변수에 pop(0)을 하여 변수에 맨 앞에 있는 값을 제거했습니다.

> if문을 적용하여 trucks_on_bridge 의 ㅎ바과 truck_weights의 맨 앞에 값을 합하여 weight(다리가 견딜 수 있는 무게)보다 적으면 trucks_on_bridge 변수에 그 값을 append 시켰습니다.

> 그렇지 않으면 0을 append 했습니다.

> 참고를 보면 쉽게 풀수 있는데 왜 혼자 하려면 생각이 안나는지... ㅜㅜ

 

참고 블로그

https://velog.io/@henrynoowah/PYTHON-Programmers-%EB%8B%A4%EB%A6%AC%EB%A5%BC-%EC%A7%80%EB%82%98%EB%8A%94-%ED%8A%B8

 

[프로그래머스] 다리를 지나는 트럭 - PYTHON

[프로그래머스] 다리를 지나는 트럭 - PYTHON

velog.io

 

문제

 

내가 작성한 코드 (틀림)
import heapq
# 단어의 개수 N 입력
n = int(input())


# N개의 단어 입력
for i in range(n):
    word = input()
    for j in set([w for w in word]):
        word_l = []
        for index, k in enumerate(word):
            if j == k:
                heapq.heappush(word_l, index)
            
            if len(word_l)>= 2:
                first_v = heapq.heappop(word_l)
                if first_v - word_l[0] != 1:
                    break
                else

> 도저히 생각이 안난다..... ㅜㅜ

> 미치겄다...

 

참고한 코드
n = int(input())

group_word = 0
for _ in range(n):
    word = input()
    error = 0
    for index in range(len(word)-1):  # 인덱스 범위 생성 : 0부터 단어개수 -1까지 
        if word[index] != word[index+1]:  # 연달은 두 문자가 다른 때,
            new_word = word[index+1:]  # 현재글자 이후 문자열을 새로운 단어로 생성
            if new_word.count(word[index]) > 0:  # 남은 문자열에서 현재글자가 있있다면
                error += 1  # error에 1씩 증가.
    if error == 0:  
        group_word += 1  # error가 0이면 그룹단어
print(group_word)

> 참고한 블로그

https://ooyoung.tistory.com/79

 

백준 1316번 [파이썬 알고리즘] 그룹 단어 체커

[Python] 백준 알고리즘 온라인 저지 1316번 : 그룹 단어 체커 Python3 코드 n = int(input()) group_word = 0 for _ in range(n): word = input() error = 0 for index in range(len(word)-1): # 인덱스 범위..

ooyoung.tistory.com

> count() 함수를 잘 활용해보자!!!

문제

 

내가 작성한 코드
cro_alpha = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']

# 크로아티아 알파벳 입력
s = input()

for i in cro_alpha:
    s = s.replace(i, 'a')
    
print(len([i for i in s]))

 

코드 설명
cro_alpha = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']

> 지문에서 소개한 크로아티아 알파벳을 리스트로 저장했다.

 

for i in cro_alpha:
    s = s.replace(i, 'a')
    
print(len([i for i in s]))

> cro_alpha 변수를 반복문을 적용하여 입력받은 문자열 변수 s에 cro_alpha 변수에 있는 알파벳이 존재하면 'a'로 변경하기 위해 replace() 함수를 사용하였습니다.

> 그리고 list compression을 적용하여 바뀐 s의 단어 개수를 출력시켰습니다.

문제

 

내가 작성한 코드 (틀림)
# 알파벳 대문자로 이루어진 단어 입력
s = input()

# 알파벳 대문자에 맞는 걸리는 시간
alpha_l = [chr(i) for i in range(int(ord('A')), int(ord('Z')) + 1)]
time_l = [i for i in range(3, 11)]
dict_alpha = {}
cnt = 0

for index, alpha in enumerate(alpha_l):
    if index%3 == 0:
        if index == 0:
            dict_alpha[alpha] = time_l[cnt]

        else:
            cnt += 1
            dict_alpha[alpha] = time_l[cnt]
    else:
        dict_alpha[alpha] = time_l[cnt]

print(sum([dict_alpha[i] for i in s]))

> 너무 어렵게 생각한거 같다.....

> 쉽게 쉽게 간단히 간단히.... ㅜㅜ

 

참고한 코드
dial = ['ABC', 'DEF', 'GHI', 'JKL', 'MNO', 'PQRS', 'TUV', 'WXYZ']
a = input()
ret = 0
for j in range(len(a)):
    for i in dial:
        if a[j] in i:
            ret += dial.index(i)+3
print(ret)

> 참고한 블로그

https://j-remind.tistory.com/76

 

(파이썬) 백준 알고리즘 5622번 다이얼

문제 풀이 (Python) 1 2 3 4 5 6 7 8 dial = ['ABC', 'DEF', 'GHI', 'JKL', 'MNO', 'PQRS', 'TUV', 'WXYZ'] a = input() ret = 0 for j in range(len(a)):     for i in dial:      ..

j-remind.tistory.com

> 이렇게 쉽게.... ㅜㅜ

문제

 

내가 작성한 코드
# 두 수 A와 B 입력
a, b = map(str, input().split())

# 첫째 자리와 셋째 자리 교환
s_a = a[2] + a[1] + a[0]
s_b = b[2] + b[1] + b[0]

# 바뀐 두 수 중 큰 값 출력
if int(s_a) >= int(s_b):
    print(s_a)
else:
    print(s_b)

 

코드 설명
a, b = map(str, input().split())

> 빈 칸으로 구분할 수 있기에 input().split() 함수를 사용하였습니다.

> map() 함수를 사용하여, 구분 한 두 값을 str 형을 적용하였습니다. 왜냐하면, 첫째 자리와 셋째 자리를 바꾸어야하기 때문에 str으로 설정하였습니다.

 

s_a = a[2] + a[1] + a[0]
s_b = b[2] + b[1] + b[0]

> 두 수가 문자로 되어있기 때문에 +를 하면 문자가 합쳐지기 때문에 원하는 결과값을 도출할 수 있습니다.

> 이 코드말고, 좀 더 이쁜 코드가 있을거 같은데.... 음.... 

 

if int(s_a) >= int(s_b):
    print(s_a)
else:
    print(s_b)

> 바뀐 두 수를 if-else문을 적용하였습니다.

문제

 

내가 작성한 코드
# 영어 대소문자 문자열 입력
s = list(map(str, input().split()))

# 단어의 개수 출력
print(len(s))

 

코드 설명
# 영어 대소문자 문자열 입력
s = list(map(str, input().split()))

> 영어 대소문자 문자열의 단어는 빈칸으로 구분할 수 있기 때문에, input().split() 함수를 적용하였습니다.

> 문자열이 모두 문자이기 때문에 map() 함수에서 str 형식으로 설정하고, list() 함수를 사용하여 각 단어를 리스트로 적용하였습니다.

 

# 단어의 개수 출력
print(len(s))

> s 변수는 문자열의 모든 단어 리스트에 넣어논 변수입니다. 그러므로 s 변수의 길이를 출력하면 원하는 결과를 출력할 수 있습니다.

문제

 

내가 작성한 코드(틀림)
from collections import Counter

s = input().upper()
s_l = [i for i in s]
dict_s = dict(Counter(s_l))

sorted_s =sorted(dict_s, key = lambda x : dict_s[x])
max_v = sorted_s.pop()
sec_v = sorted_s.pop()
if dict_s[max_v] == dict_s[sec_v]:
    print('?')
else:
    print(max_v)

> 분명히 틀리지 않은거 같은데.... 결과는 맞는데 계속 '런타임 에러'가 발생한다 ㅜㅜ

 

참고한 코드
words = input().upper()
unique_words = list(set(words))  # 입력받은 문자열에서 중복값을 제거

cnt_list = []
for x in unique_words :
    cnt = words.count(x)
    cnt_list.append(cnt)  # count 숫자를 리스트에 append

if cnt_list.count(max(cnt_list)) > 1 :  # count 숫자 최대값이 중복되면
    print('?')
else :
    max_index = cnt_list.index(max(cnt_list))  # count 숫자 최대값 인덱스(위치)
    print(unique_words[max_index])

> 참고한 블로그

https://ooyoung.tistory.com/70

 

백준 1157번 [파이썬 알고리즘] 단어 공부

[Python] 백준 알고리즘 온라인 저지 1157번 : 단어 공부 Python3 코드 words = input().upper() unique_words = list(set(words)) # 입력받은 문자열에서 중복값을 제거 cnt_list = [] for x in unique_words..

ooyoung.tistory.com

> count() 함수

 * 문자열 안에서 찾고 싶은 문자의 개수를 찾을 수 있다. 어떤 함수는 문자열에서만 사용 가능한 함수도 있는데 count 함수는 튜플, 리스트, 집합과 같은 반복 가능한 iterable 자료형에서도 사용 가능하다. 

 * 사용 방법은 '변수.count(찾는 요소)' 행태로 사용한다.

문제

 

내가 작성한 코드
# 테스트 케이스의 개수 T 입력
t = int(input())

# 각 테스트 케이스 입력 및 출력
for i in range(t):
    cnt, test = map(str, input().split())
    for j in test:
        print(j * int(cnt), end='')
    print()

 

코드 설명

> t는 테스트 케이스의 개수 T를 의미합니다.

> 테스트 케이스의 개수만큼 반복문을 진행하여 각 테스트 케이스의 반복할 수(cnt)와 문자열(test)를 받기위해 map 함수를 사용했습니다. 그리고, test 변수가 문자이기에 map 함수안에 str로 설정하였습니다.

> 두 변수를 받은 후, test 변수의 각 문자를 반복할 수대로 print하기 위해서 이중반복문을 사용하였고,  출력할 값은 붙어있어야하기 때문에 print() 안에 end=''로 설정하였습니다.

> 또한, 다음 테스트 케이스는 다음 칸에 출력을 해야하므로 반복문을 빠져나온 후 print()를 작성하여 한 칸 넘어갈 수 있게 해주었습니다.

+ Recent posts