아자아자 화이팅이닷 !

230828 프로그래머스 문제풀기 본문

TIL

230828 프로그래머스 문제풀기

유초23 2023. 8. 29. 00:09
728x90

다시 뇌를 잘 굴러가게 해보자 !

아쟈아쟈 화이팅이다 !!!!!!!!!!!

자격증이나 시험에 촉박한 기간이 되면 마음도 다급해지고 굉장히 정신없어 지는것같다 ,,

그럴때뿐만 아니라 평소에도 잘 갖춰진 계획이 있으면 조금이나마 마인드 컨트롤을 잘 할 수 있을 것 같다 !

토익도 토스처럼 좋은 결과가 나오길 ..!

으쟈쟈 ! ! ! ! ( •̀ ω •́ )y


* 무작위로 K개의 수 뽑기 문제에서

 

나는

def solution(arr,k):
    answer = []
    for i in arr:
        if i not in answer:
            answer.append(i)
    for _ in range(abs(k-len(answer))):
        if len(answer) > k:
            answer.pop()
        elif len(answer) < k:
            answer.append(-1)
    return answer

이렇게 문제를 풀었는데,

 

더 간략한 좋은 코드가 있어 가져와봤다 !

def solution(arr, k):
    ret = []
    for i in arr:
        if i not in ret:
            ret.append(i)
        if len(ret) == k:
            break

    return ret + [-1] * (k - len(ret))

 

바로 break문을 쓰는것 !

따로 answer(내가 짠 코드)의 길이가 k보다 클때의 경우를 생각하지 않아도 되는 좋은 코드인 것 같다 !

 


* 외계어 사전 문제에서

 

나는

def solution(spell,dic):
    count = 0
    for i in dic:
        for j in spell:
            if j in i:
                count += 1
        if count == len(spell):
            return 1
        count = 0
    return 2

 

이렇게 count를 변수로 주고 풀었는데,

 

sorted()함수를 사용하면 훨씬 간단하게 해결할 수 있었다 !

def solution(spell, dic):
    for d in dic:
        if sorted(d) == sorted(spell):
            return 1
    return 2

 

WoW !


* 문자열 겹쳐쓰기 문제에서는

 

딱 이 문제를 보고 앞의 문제들에서 굉장히 간단하게 해결을 했던 다른 사람들의 풀이 방식이 떠올랐다 !

그래서 그 느낌대로 떠올리며 문제를 풀었더니

def solution(my_string,overwrite_string,s):
    return my_string[:s] + overwrite_string + my_string[s+len(overwrite_string):]

 

이렇게 간단하게 문제를 해결할 수 있었다 !

행 - 벅 - (❁´◡`❁)


* 그림 확대 문제에서

 

처음에 나는

def solution(picture,k):
    result = []
    for i in picture:
        for j in i:
            result.append((j*k))
        for x in result[::k]:
            result.append(x*(k-1))
    return result

이런식으로 문제를 해결하려고 했는데,

 

구글링을 해보니까 더 간단하게 문제를 해결할 수 있는 방법들이 있었다.

 

나는

def solution(picture,k):
    result = []
    for i in picture:
        char = ""
        for j in i:
            char += j*k
        for _ in range(k):
            result.append(char)
    return result

 

이렇게 문제를 해결하였는데,

char = ""를 for i in picture안에 넣은 이유가 궁금했었다 !

 

그 이유는

def solution(picture,k):
    result = []
    char = ""
    for i in picture:
        for j in i:
            char += j*k
        for _ in range(k):
            result.append(char)
        char = ""
    return result

 

이렇게 char = ""의 중복을 막을 수 있기 때문이었다 !

깨달음을 얻어가는고만 ,, <(^-^)>


* 직사각형 넓이 구하기 문제에서

 

나는

def solution(dots):
    answer1 = []
    answer2 = []
    for i in range(3):
        answer1.append(abs(dots[i+1][0] - dots[i][0]))
        answer2.append(abs(dots[i+1][1] - dots[i][1]))
    return max(answer1) * max(answer2)

이렇게 문제를 해결하였는데, 더 간결한 코드가 있을 것 같아서 찾아보았다.

 

def solution(dots):
    return (max(dots)[0] - min(dots)[0])*(max(dots)[1] - min(dots)[1])

이렇게 바로 dots에 max를 해주고 min을 해줘서 각각의 값들을 구해서 곱해주면 되는 아주 간결한 코드가 있었다 !

대 단 쑤 !


* 캐릭터의 좌표 문제는

 

처음에 이것저것 시도해보다가 잘 안돼서 구글링을 했다 !

 

그래서

def solution(keyinput,board):
    xlim,ylim = board[0]//2,board[1]//2
    dict = {'left':(-1,0), 'right':(1,0), 'up':(0,1), 'down':(0,-1)}
    x,y = 0,0
    for i in keyinput:
        dx,dy = dict[i]
        if abs(x+dx) > xlim or abs(y+dy) > ylim:
            continue
        else:
            x,y = x+dx,y+dy
    return [x,y]

이렇게 문제를 해결하였다 !

 

dictionary를 쓰는것에서 이마를 탁 치고 ,,

dictionary를 쓴지 좀 돼서 그런지 dx,dy = dict[i]라고 표현하는 것이 새삼 낯설었댜 ^^...

그리고 x+dx값과 y+dy값 각각을 abs로 넣어줘야한다는것 ..!

음수도 board값 안에 있어야하니꽈 ..!

그리고 continue쓰는것도 ,,

다시 한번 생각해보게 해주는 좋은 코드였다 !


오늘은 여기까쥐 !

한동안은 잘 안풀렸었는데 오늘은 괜찮았다 ㅎ.ㅎ

다행쑤 ~

화이팅이다 !

728x90