문제 :

 

코딩테스트 연습 - 체육복

점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번

programmers.co.kr

 

Solution 

import copy
def solution(n, lost, reserve):
    answer = 0
    lost.sort()
    reserve.sort()
    
    for x in copy.deepcopy(lost):
        for y in copy.deepcopy(reserve):
            if x==y:
                lost.remove(x)
                reserve.remove(y)
                break
        
    for x in copy.deepcopy(lost):
        for y in copy.deepcopy(reserve):
            if abs(x-y)==1:
                lost.remove(x)
                reserve.remove(y)
                break

    answer=n-len(lost)
    return answer

오늘 출근길에 푼 문제,,

list를 remove하면서 for문을 돌렸더니 제대로 for문이 돌지 않았다.

copy 라이브러리의 deepcopy를 이용했더니 해결,,

 

계속 75점 맞다가 lost와 reserve 학생이 같은 경우를 먼저 제거해주어야 한다는 걸 알게 되었다..!...!!!

Level 1 따린데 자존감 내려간다 따흐흑

반응형

문제 : 

 

코딩테스트 연습 - 모의고사

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는

programmers.co.kr

 

Solution

def solution(answers):
    answer = []
    s1=[1,2,3,4,5]
    s2=[2,1,2,3,2,4,2,5]
    s3=[3,3,1,1,2,2,4,4,5,5]
    
    c1=c2=c3=0 #맞은 문제 수
    p1=p2=p3=0 #위치
    
    for i in range(len(answers)):
        if answers[i]==s1[p1]:c1+=1
        if answers[i]==s2[p2]:c2+=1
        if answers[i]==s3[p3]:c3+=1
        
        p1+=1
        p2+=1
        p3+=1
        
        if p1==len(s1):p1=0
        if p2==len(s2):p2=0
        if p3==len(s3):p3=0
    
    maxscore=max(c1,c2,c3)
    if c1==maxscore:answer.append(1)
    if c2==maxscore:answer.append(2)
    if c3==maxscore:answer.append(3)
    
    return answer

반응형

문제 : 

 

코딩테스트 연습 - K번째수

[1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [1, 7, 3]] [5, 6, 3]

programmers.co.kr

오늘 재택근무 중에 팀장님한테 급 대면면담 호출을 받았다,, ^^ 행복하다...

 

전철에 사람이 정말 없어서 노트북을 꺼내 Level 1 문제를 슬렁 풀어봤다...

 

Solution

def solution(array, commands):
    answer = []
    
    for a in range(len(commands)):
        
        i=commands[a][0]
        j=commands[a][1]
        k=commands[a][2]
        tmp=array[i-1:j] #slice
        tmp.sort()
        answer.append(tmp[k-1])
                
    return answer

슬라이스로 풀었당,, 

반응형

문제 : 

 

코딩테스트 연습 - 주식가격

초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. 제한사항 prices의 각 가격은 1 이상 10,00

programmers.co.kr

 

스택/큐에 있던 카테고리지만 그냥 이중 for문으로 풀었다.

 

입출력 예시의 3초, 4초 시점에서 가격이 1초 뒤에 떨어져도, 1초간 가격이 떨어지지 않아도

둘다 1초간 가격이 떨어지지 않은 경우라는 것이 직관적으론 이해가 갔는데 

처음 구현할때는 계속 원하는 출력이 나오지 않았다 ㅡㅡ

 

짜증나서 이틀 뒤에 처음부터 다시 풀었더니 풀렸다.

 

Solution

def solution(prices):
    answer = []
    size=len(prices)
    for i in range(size):
        cnt=1
        for j in range(i+1,size-1):        
            if prices[i]>prices[j]: break    
            cnt+=1
            
        answer.append(cnt)
        if len(answer)==size-1:
            answer.append(0)
            return answer

 

헤헤

반응형

문제 : 

 

코딩테스트 연습 - 타겟 넘버

n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+

programmers.co.kr

예전에 풀어봤던 dfs/bfs 문제를 다시 풀어보았다

 

 

Solution

예전 풀이 : BFS (deque() 사용)

from collections import deque
def solution(numbers, target):
    answer = 0
    size=len(numbers)
    dq=deque()
    dq.append((0,0))
       
    while dq:
        cur,cnum=dq.popleft()
        
        if cur==size and cnum==target:
            answer+=1
        
        else:
            if cur<size:
                nnum=numbers[cur]
                dq.append((cur+1,cnum+nnum))
                dq.append((cur+1,cnum-nnum))    
    return answer

 

이번 풀이 : DFS

res=0
def dfs(numbers,num,target,idx):
    global res
    if idx==len(numbers):
        if num==target:
            res+=1
            return
        else : return
    
    dfs(numbers,num+numbers[idx],target,idx+1)
    dfs(numbers,num-numbers[idx],target,idx+1)
    
def solution(numbers, target):
    global res
    dfs(numbers, 0, target, 0)
    return res

 

 

반응형

프로그래머스>해시>'완주하지 못한 선수' 를 풀었다.

 

코딩테스트 연습 - 완주하지 못한 선수

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수

programmers.co.kr

 

얼마전 비슷한 문제를 풀어서 어렵지 않게 풀 수 있었다. (해쉬는 파이썬 딕셔너리가 짱짱인듯..)

 

비슷한 문제 : [해커랭크] Hash Table : Ransom Note 가 있다. (같은 접근으로 풀이 가능)

 

Hash Tables : Ransom Note (Python)

Hash Tables: Ransom Note | HackerRank Given two sets of dictionaries, tell if one of them is a subset of the other. www.hackerrank.com 오랜만에 해커랭크에서 문제를 풀었다. 고새 파이썬 딕셔너리 사용..

rokroks.tistory.com

 

 


 

 

Solution

def solution(p,c):
    dic={}
    res=''
    for x in p:
        if x not in dic:
            dic[x]=1
        else:
            dic[x]+=1

    for x in c:
        if x in dic:
            dic[x]-=1
    
    for x in dic:
        if dic[x]>0: res=x
            
    return res  

1) 딕셔너리에 '참가자 이름 : 동명이인 수'로 저장

2) 완주자 이름(딕셔너리 key) 존재 시 value 감소  

3) 딕셔너리 0 초과 값인 key 출력 (완주하지 않은 경우)

 

 

깰끔

 

 

 


 

 

 

다른 사람의 파이썬 풀이 중에 흥미로운 라이브러리가 있어서 가져와봤다.

(참고 : wooaoe.tistory.com/71)

 

import collections as coll
def solution(p,c):
    p.sort()
    c.sort()
    result=coll.Counter(p)-coll.Counter(c)
    return list(result)[0]

collections 라이브러리의 Counter,, 차집합 개념으로 구현된 코드이다.

역시 파이썬은 최강이다..

 

 

반응형
 

Hash Tables: Ransom Note | HackerRank

Given two sets of dictionaries, tell if one of them is a subset of the other.

www.hackerrank.com

오랜만에 해커랭크에서 문제를 풀었다. 고새 파이썬 딕셔너리 사용법이 헷갈려서 삽질을 좀 했다..

 

 

삽질했던 부분 

1) 딕셔너리는 키:값 형태인데 키에 문자열을 저장했다.. >> note의 문자열이 magazine 배열에 있을경우 무조건 'Yes' return하는 문제 발생

2) 해커랭크는 기본 입력부분은 제공이 되는데 입력부분을 제대로 확인하지 않아 magazine, note가 하나의 string인줄 알고 공백을 토큰으로 슬라이스 하고있었다...^^ 온라인 코테에서 입력부분 제공되는 경우도 있으니 앞으론 입력부도 제대로 확인하도록 하자 나 자신아,,^^

 

 


 

Solution

#!/bin/python3

import math
import os
import random
import re
import sys

# Complete the checkMagazine function below.
def checkMagazine(magazine, note):
    dic={}
    res=True
    
    for i in range(len(magazine)):
        if magazine[i] not in dic:
            dic[magazine[i]]=1
        else:
            dic[magazine[i]]+=1
        
    for i in range(len(note)):
        if note[i] in dic.keys():
                dic[note[i]]-=1
                if dic[note[i]]<0:
                    print('No')
                    res=False
                    break
        else:
            print('No')
            res=False
            break

    if res==True:
        print('Yes')

    
if __name__ == '__main__':
    mn = input().split()

    m = int(mn[0])

    n = int(mn[1])

    magazine = input().rstrip().split()

    note = input().rstrip().split()

    checkMagazine(magazine, note)

 

 

딕셔너리구조를 보여주기 위해 dic/ dic.keys()/ dic.values()를 각각 출력해보았다.

아래처럼 '문자열'(키):값(개수) 가 조회된다

 

 

어쨌든 햅삐한 결말...

 

반응형

+ Recent posts