프로그래머스 LV1(3)

2024. 1. 26. 02:52백준 및 프로그래머스/프로그래머스 LV 1

- 월간 코드 챌린지 시즌 1

def solution(a, b):
    answer = 0
    for i in range(len(a)):
        answer += a[i] *b[i]
    return answer

 

-가운데 글자 가져오기

def solution(s):
    answer = ''
    if len(s) % 2 == 1:
        answer+= s[len(s)//2]
    else:
        answer+=s[len(s)//2 -1] +s [len(s)//2]
    return answer

 

-수박수박수박수박수박수?

def solution(n):
    answer = ''
    for i in range(n):
        if i % 2 == 0:
            answer+="수"
        else:
            answer+='박'
    return answer

 

-약수의 개수와 덧셈

def solution(left, right):
    answer = 0
    for i in range(left,right+1):
        cnt = 0 
        for j in range(1,i+1):
            if i % j == 0:
                cnt+=1
        if cnt % 2 == 0:
            answer+=i
        else:
            answer-=i
            
    return answer

 

-문자열 내림차순으로 정렬하기

def solution(s):
    answer = ''
    word = []
    for i in s:
        word.append(i)
    word.sort(reverse=True)
    return ''.join(word)

 

-부족한 금액 계산하기

def solution(price, money, count):
    answer = 0
    coin = 0 
    for i in range(1,count+1):
        coin+=price * i
        
    answer = coin - money
    
    
    if answer>=0:
        return answer
    else:
        return 0

 

-문자열 다루기 기본

def solution(s):
    answer = True
    num_count = 0
    str_count = 0
    for i in s:
        if i.isdigit():
            num_count +=1
    if (len(s) == 4 and num_count == 4) or (len(s) == 6 and num_count == 6):          
        return answer
    else:
        return False

 

-행렬의 덧셈

def solution(arr1, arr2):
    answer = []
    for i,j in zip(arr1,arr2):
        
        num = []
        
        for a,b in zip(i,j):
            
            num.append(a+b)
            
        answer.append(num)
        
    return answer

-zip함수를 이용하면 쉽게 풀 수 있음!

 

-직사각형 별 찍기

a,b = map(int,input().split())
for i in range(b):
    print("*"*a)

 

-같은 숫자는 싫어

def solution(arr):
    answer = [arr[0]]
    for i in range(len(arr)-1):
        if arr[i]!=arr[i+1]:   
            answer.append(arr[i+1])
    
   
    return answer

 

-3진법 뒤집기

def solution(n):
    answer = ""
    while n > 0:
        
        answer+=str(n%3)
        n = n // 3
    return int(answer,3)

 

-예산

def solution(d, budget):
    answer = 0
    d.sort()
    count = 0 
    for i in range(len(d)):
        budget = budget - d[i]
        if budget<0:
            break
        count+=1
        
    return count

 

-이상한 문자 만들기

def solution(s):
    answer = ''
    tal = s.split(" ")
    
    for i in range(len(tal)):
        
        word = len(tal[i])
        
        for j in range(word):
            if j % 2 == 0:
                answer+=tal[i][j].upper()
            else:
                answer+=tal[i][j].lower()
        
        if len(tal) -1 != i:
            answer+=" "
    
    return answer

-더 좋은 풀이가 있을 거라 생각합니다.! 

 

-크기가 작은 부분 문자열

def solution(t, p):
    answer = 0
    p_num = len(p)
    for i in range(len(t)-p_num+1):
        tal = t[i:i+p_num]
        if int(tal) <= int(p):
            answer+=1
    return answer

 

-삼총사

def solution(number):
    count = 0
    
    n = len(number)
    
    for i in range(n):
        for j in range(i+1,n):
            for k in range(j+1,n):
                if number[i] + number[j] + number[k] == 0:
                    count+=1
    return count

 

-최소 직사각형

def solution(sizes):
    answer = 0
    tri = []
    for x, y in sizes:
        if x < y:
            tri.append((y,x))
        else:
            tri.append((x,y))
    
    max_x = 0
    max_y = 0
    
    for i in range(len(tri)):
        max_x = max(max_x,tri[i][0])
        max_y = max(max_y,tri[i][1])
    
    return max_x * max_y

 

-가장 가까운 같은 글자

def solution(s):
    answer = []
    word = []
    for i in range(len(s)):
        if s[i] not in word:
            answer.append(-1)
            word.append(s[i])
        else:
            for k in range(len(word)-1,-1,-1):
                if word[k] == s[i]:
                    answer.append(i-k)
                    break
            word.append(s[i])
            
    return answer

(이렇게 푸는게 맞는 지 모르겠지만.. 더 좋은 풀이가 있을 거라 생각합니다!)

 

-숫자 문자열과 영단어

def solution(s):
    answer = 0
    number  = {"zero":0,"one":1,"two":2,"three":3,"four":4,"five":5,"six":6,"seven":7,"eight":8,"nine":9}
    for i in number:
        s = s.replace(i,str(number[i]))
    return int(s)

 

-시저암호

def solution(s, n):
    answer = ''
    s = list(s)
    for i in range(len(s)):
        if s[i].islower():
            s[i] = chr((ord(s[i])-ord("a")+n) % 26 +ord("a"))
        elif s[i].isupper():
            s[i] = chr((ord(s[i])-ord("A")+n) % 26 +ord("A"))
    return ''.join(s)

(아스키 코드로 풀면 쉽게 풀리는 문제)

'백준 및 프로그래머스 > 프로그래머스 LV 1' 카테고리의 다른 글

프로그래머스 LV 1  (0) 2024.01.28
프로그래머스 LV 1(5)  (0) 2024.01.26
프로그래머스 LV1(4)  (0) 2024.01.26
프로그래머스 LV 1(2)  (0) 2024.01.25
프로그래머스 1LV (1)  (0) 2024.01.25