포포's 코딩&일상 기록

[코드트리챌린지] 7회차 본문

카테고리 없음

[코드트리챌린지] 7회차

포포252 2023. 10. 22. 18:18

실력진단

오답 

n= int(input()) # 격자 줄수 
arr =[list(map(int,input().split())) for _ in range(n)]
arr2= arr 
minMa=n*n

di = [-1,0,1,0]
dj = [0,1,0,-1]

#마을크기 구하는 함수 
def cntMa(i,j):
    count =0 

    bu = arr2[i][j] #부족의 숫자 

    qu= [(i,j)]
    while qu: # 큐에 뭐가 있는동안 
        ddi,ddj = qu.pop() # 기준좌표 

        #기준 좌표의 상하좌우 탐색 했을때 부족값과 같은지 
        for i in range(4):
            dki,dkj = di[i], dj[i]
            if (0 <= ddi+dki < n) and  (0 <= ddj+dkj < n) : #범위체크
                if bu == arr2[ddi+dki][ddj+dkj]:
                    count +=1 
                    qu.append((ddi+dki,ddj+dkj))
                    arr2[ddi+dki][ddj+dkj] ='v' # 방문표시 
                

    return count



#격자탐색
for i in range(n):
    for j in range(n):
        if arr2[i][j] != 'v':#방문하지 않았다면
            #탐색시작 
            cntma= cntMa(i,j)
            #최솟값 변경
            if minMa > cntma:
                minMa= cntma

print(minMa)

 

다른문제 

 

오답 코드

n= int(input()) #자릿수

arr= [4 for _ in range(n)] 

# 재귀 함수
def f(idx): # 0~(idx-1) 인덱스 까지는 결정을 했고  
            # idx ~ (n-1) 인덱스 까지 결정하는 함수   # 현재상태
    

    # 종료조건 
    if idx == n : #0~(n-1) 까지 결정했따면 
        #if sum(arr) <= ((n*3)-(1*3)-(2*3)) and sum(arr) >= ((2*3)+(1*(n-3))): 
        
        
            print(*arr,sep="")
        return

    # 재귀함수 작성
    #idx 인덱스에 넣을 값 결정 
    for i in range(1,4):
        arr[idx] = i 
        #다음값 넣기 
        f(idx+1) 
        arr[idx]=4
    

#재귀호출
f(0)

"""#2의 개수를 세는 함수 
def cnt2(arr):


#1의 개수를 세는 함수 
def cnt1(arr):"""

정답코드 - 내 풀이에서는 함수 정의 위치가 중요했다..

n= int(input()) #자릿수

arr= [4 for _ in range(n)] 


#2의 개수를 세는 함수 
def cnt2(arr):
    c2 =0
    for elem in arr:
        if elem ==2:
            c2 +=1 
    return c2


#1의 개수를 세는 함수 
def cnt1(arr):
    c1 =0 
    for elem in arr:
        if elem ==1:
            c1 +=1 
    return c1

# 재귀 함수
def f(idx): # 0~(idx-1) 인덱스 까지는 결정을 했고  
            # idx ~ (n-1) 인덱스 까지 결정하는 함수   # 현재상태
    

    # 종료조건 
    if idx == n : #0~(n-1) 까지 결정했따면 
        #if sum(arr) <= ((n*3)-(1*3)-(2*3)) and sum(arr) >= ((2*3)+(1*(n-3))): 
        if cnt2(arr) >= 3 and cnt1(arr) >=3: 
            print(*arr,sep="")
        return

    # 재귀함수 작성
    #idx 인덱스에 넣을 값 결정 
    for i in range(1,4):
        arr[idx] = i 
        #다음값 넣기 
        f(idx+1) 
        arr[idx]=4
    

#재귀호출
f(0)

 

공부한내용1

이거 좀어려웠따... 

https://www.codetree.ai/missions/4/problems/max-of-unique-number?&utm_source=clipboard&utm_medium=text

 

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

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

www.codetree.ai

내풀이

n= int(input()) # 숫자 개수
arr= list(map(int,input().split()))#숫자 입력받기

ma = max(arr) #-
checkDu = [0 for _ in range(ma+1)] # range(n+1) 아님..

#중복값 체크 하는 코드 
for i in arr:
    checkDu[i] +=1

maxDu = -1
# 맨뒤에있는 1 값 찾기 
for i in range(ma,0,-1):
    if checkDu[i] == 1:
        maxDu=i
        break;
print(maxDu)

모범답안1 

# 변수 선언 및 입력:

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

# 최댓값 찾기
max_num = -1

for curr_num in nums:
    # 최대가 될 수 있는 후보입니다.
    if max_num < curr_num:
        # 갱신할 수 있는지 확인하기 위해 이 숫자의 등장 빈도를 셉니다.
        count = 0
        for elem in nums:
            if elem == curr_num:
                count += 1
        
        # 이 숫자가 배열에서 유일할때만 갱신합니다.
        if count == 1:
            max_num = curr_num

print(max_num)

모범답안2 

-> 내코드랑 비슷... 근데나랑다른점은 .. 최댓값을 안구하고 그냥 문제에서 주어진 값1000으로 초기화한 거..

MAX_NUM = 1000

# 변수 선언 및 입력:
n = int(input())
nums = list(map(int, input().split()))

# count 배열을 0으로 초기화
# 편의상 배열의 index가 실제 숫자를 나타내도록 하기 위해
# MAX_NUM + 1개의 공간을 갖는 배열로 선언합니다.
count = [0 for _ in range(MAX_NUM + 1)]


# step1. count 배열에 수의 등장 빈도를 셉니다.
for elem in nums:
    count[elem] += 1

# step2. 큰 수부터 체크하며 한 번 등장한 최대의 값을 찾습니다.
answer = -1
for max_candidate in range(MAX_NUM, -1, -1):
    if count[max_candidate] == 1:
        answer = max_candidate
        break

print(answer)

공부한 내용2- 틀림.. 

https://www.codetree.ai/missions/4/problems/max-profit-of-single-car?&utm_source=clipboard&utm_medium=text

 

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

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

www.codetree.ai

내가 작성한 코드 

n=int(input()) # 년수 
arr= list(map(int,input().split()))#자동차가격 

ma = arr[0]
mi=arr[0]
for i in range(n):
    if arr[i] < mi: #사는 지점 
        mi= arr[i]
        ma= arr[i]
    
    if arr[i] > ma: # 파는 지점 
        ma= arr[i]


print(ma-mi)


"""
첫 번째 예제: 가격이 2일 때 사고 6일 때 팔았을 때의 이익은 4입니다. 자동차를 사기 전에는 팔 수 없기 때문에 10 - 2 = 8은 답이 될 수 없음에 유의합니다.
두 번째 예제: 언제 사고 팔아도 이익이 나지 않기 때문에 0을 출력해줍니다.
-> 함수쓰면안되고 순회해야함..

mi =  min(arr)
ma = max(arr)
print(ma-mi)
"""

공부한내용 3

https://www.codetree.ai/missions/4/problems/minimum-difference-between-two-numbers?&utm_source=clipboard&utm_medium=text

n= int(input()) #개수
arr= list(map(int,input().split())) #정수 개수 

chaList=[]
for i in range(1,len(arr)):
    chaList.append(arr[i]-arr[i-1])

print(min(chaList))

 

공부한내용 4

https://www.codetree.ai/missions/4/problems/sum-length-of-string?&utm_source=clipboard&utm_medium=text

 

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

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

www.codetree.ai

n=int(input())

arr= [input() for _ in range(n)]
cntlen=0
cnta=0

for elem in arr:
    #길이 더하기
    cntlen += len(elem)
    #a개수 찾아서 더하기 
    """for alph in elem: #첫번쨰 문자로 'a' 가 몇번 나왔는지 확인해야함 
        if alph =='a':
            cnta +=1 """
    if elem[0] =='a':
        cnta +=1 

print(cntlen,cnta)

 

 

#코드트리 #코딩테스트 #코딩테스트실력진단