코딩테스트 연습 9,10일차

김채원·2023년 2월 6일
0

coding_test

목록 보기
9/11

9일차는 아침부터 밤까지 일정이 있어 쉬어갔습니다 ㅎㅎ
또 월요일이네요
월요일은 컨디션 조절이 참 힘들죠. 가볍게 풀고 일찍 자는걸로 ㅎㅎ
내일부터는 강의를 듣고 유형별 백준 문제도 풀 계획입니다.
저녁 먹기전 힘들어서 뻗어있는 시간과 먹은 후 힘들어서 뻗어있는 시간이 좀 아깝습니다. 그렇다고 잠을 줄이기엔 도저히 그건 안되는 사람..
잠죽자 생활을 2년간 해봤는데, 단물 빼먹히고 진짜 죽습니다. ㅎㅎ
아무도 고마워하지 않아요.
아예 음식이 안 받아서 하루에 간신히 커피만 한 잔 먹었던 생활..ㅎ;;
그래서 그 때부터 건강 챙기며 쉬어가자고 생각했습니다.


Lv.1

소수 찾기

단순 소수찾기가 뜬금없이 나올 일은 없으니 효율성이 관련된 문제

📎 에라토스테네스의 체

  1. 2부터 𝑁까지의 모든 자연수를 나열한다
  2. 남은 수 중에서 아직 처리하지 않은 가장 작은 수 𝑖를 찾는다
  3. 남은 수 중에서 i의 배수를 모두 제거한다(𝑖는 제거하지 않는다)
  4. 더 이상 반복할 수 없을 때까지 2번과 3번의 과정을 반복한다
def solution(n):
    lst = [1]*(n + 1) # 1=True
    
    for i in range(2, int(n**(1/2)) + 1): 
        if lst[i] == 1: 
            for j in range(i*i,n+1,i):
                lst[j] = 0
                
    answer = lst.count(1)
    return answer-2 #0,1제외

i*i하면 4부터 시작! step도 i로 두면서 2의 배수 충족!

def solution(n):
    num=set(range(2,n+1))

    for i in range(2,n+1):
        if i in num:
            num-=set(range(2*i,n+1,i))
    return len(num)

이게 진짜 코딩이군...반성하고 갑니다....한 번에 배수를 다 빼버리다니.... for문을 2번씩이나 돌 필요가 없당 ㅠㅠ

모의고사

이거...처음에 조건문을 if말고 elif로 했더니
동점이 답인 case에서 if만 실행하고 반복이 넘어가버리는 사태가 발생...
그래서 전부 if로 처리해야 넘어가지 않는다............
무서운 코딩의 세상

def solution(answers):
    answer = []
    p1 = [1,2,3,4,5]
    p2 = [2,1,2,3,2,4,2,5]
    p3 = [3,3,1,1,2,2,4,4,5,5]
    score = [0,0,0]
    
    for idx,v in enumerate(answers):
        if v == p1[idx%len(p1)]:
            score[0] += 1
        if v == p2[idx%len(p2)]:
            score[1] += 1
        if v == p3[idx%len(p3)]:
            score[2] +=1
            
    for idx,v in enumerate(score):          
        if v==max(score):
            answer.append(idx+1)
    
    return answer

소수 만들기

나는 itertools 없으면 못 살듯...

from itertools import combinations

def solution(nums):
    answer = 0
    for c in combinations(nums,3):
        flag = 0
        num = sum(c)
        for i in range(2,int(num**(1/2))+1):
            if num % i == 0:
                flag = 1
                break
        if flag == 0 :
            answer += 1
    return answer

for - else 구문이 신기하다.

def solution(nums):
    from itertools import combinations as cb
    answer = 0
    for a in cb(nums, 3):
        cand = sum(a)
        for j in range(2, cand):
            if cand%j==0:
                break
        else:
            answer += 1
    return answer

가장 가까운 글자

def solution(s):
    answer = []
    dic = {}
    
    for idx in range(len(s)):
        if s[idx] not in dic:
            answer.append(-1)
        else:
            answer.append(idx-dic[s[idx]])
        dic[s[idx]] = idx
     
    return answer
profile
잡다한 공부 기록용

0개의 댓글