포포's 코딩&일상 기록

7월 29일 토요일 코테 : 기말고사 : 정답 맞춘 문제 본문

코테/특강

7월 29일 토요일 코테 : 기말고사 : 정답 맞춘 문제

포포252 2023. 7. 29. 22:15

 

No. 1

 

 

-  문제 :부분 문자열의 개수

https://www.codetree.ai/problems/number-of-substrings?utm_source=clipboard&utm_medium=text 

 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai

 

코드 

 

A =input()
B= input() #항상 길이가 2 
cnt = 0 

#현재조건
#종료조건
#재귀호출식 작성

def func(idx): # 0 ~ (idx-1) 까지 값이 A에 순서대로 들어있음을 확인
               # idx ~ n-1 까지 값이 A에 순서대로 들어있음을 확인해야한다. 
    global aidx
    
    #종료조건 : 0 ~ (len(B)-1) 까지 값이 A 에 순서대로 들어있음을 확인
    #print('idx',idx, 'len(B)',len(B))
    if idx+1 > len(B) :  #이부분 값비교 주의
        global cnt
        cnt += 1
        return 

    #재귀 호출 부분 : B의 idx 값이 A 다음번 차례에 있음을 확인 
    if B[idx] == A[aidx]:
        #print(B[idx], A[aidx])
        aidx += 1 #aidx 다음값 체크해줘야함 
        func(idx+1)
        #aidx -=1 #aidx 원래자리로 복구 #안해줘도 되는듯 


#함수호출
for aidx in range(len(A)):
    func(0)

print(cnt)

 

새롭게 알게된것 

 

 

 

주의할점

 

 

No. 2

 

 

-  문제 :특정 수와 근접한 합

https://www.codetree.ai/problems/sum-close-to-particular-number?utm_source=clipboard&utm_medium=text 

 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai

코드 

 

n, s = map(int,input().split())
nums=  list(map(int,input().split())) 

chalist= []  # nums 에서 두개 빼서 .. s 와의 차의 절댓값 리스트를 담을 리스트 

for i in range(n):
    for j in range(n):
        if i != j: #두개 값이 다를때... 
            temp1 ,nums[i] = nums[i], 0  #빼주는 코드
            temp2 , nums[j] = nums[j], 0 
            chalist.append(abs(s - sum(nums)))
            #다시 돌려주는 코드 
            nums[i] = temp1
            nums[j] = temp2

print(min(chalist))
#출력은 chalist 에 적힌 값중 min 을출력해도 될듯... 아니면.. 리스트에 안담고 min 만찾아봐도 될듯

 

새롭게 알게된것 

 

 

 

주의할점

 

 

No. 3

 

 

-  문제 :이동경로상에 있는 모든 숫자 더하기

https://www.codetree.ai/problems/add-all-the-numbers-on-the-path?utm_source=clipboard&utm_medium=text 

 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai

 

코드 

 

n,t = map(int, input().split())
bang = input()

mat= []

#격자 생성
for _ in range(n):
    mat.append(list(map(int,input().split())) )

#회전 L: -1 R:+1  // (값 +4) % 4
#이동: F
di = [-1,0 , 1 ,0]
dj = [0,1, 0,-1]




#이동 시작
idx= 0 
sumlist =[]

ddi,ddj = n//2 , n//2 #가운데 위치

#시작위치 포함 해야함 
sumlist.append(mat[ddi][ddj])
for k in bang:
    if k =='L':
        idx = (idx-1+4)%4
    
    elif k == 'R':
        idx = (idx+1+4)%4

    else: #직진 
        #print('before',ddi,ddj)
        kdi, kdj  = ddi + di[idx], ddj+ dj[idx]
        #print('after',kdi,kdj)
        #범위 벗어나면 무시  -> 확인 위치 주의
        if 0 <= kdi <n and 0 <= kdj < n: 
            ddi, ddj = kdi, kdj
            val= mat[ddi][ddj]
            #print('val',val)
            sumlist.append(val)

print(sum(sumlist))

 

새롭게 알게된것 

 

 

 

주의할점