[알고리즘]/코테준비

[코테준비] KOALA 대회/코테 연습 1주차 후기

개발새발주발 2023. 5. 27. 19:58
728x90

모의 코딩 테스트 .. 를 쳤다 .. 

컨셉 : 카카오 코딩 테스트 (문자열 파싱 등)
난이도 : 실제 코딩테스트의 80~90% 정도

난이도와 컨셉은 이런느낌 

 

3시간동안 10문제중 4문제를 해결했다 

..

..


- 우선 시간 잡고 푸는 연습을 해서 좋았다.. 

그리고 한 문제 한 문제 토의하는 시간까지 !! 

알찬 .. 시간이었다 .. 

오늘은 비도 오고 나가기 싫어서 느적거리다가 집에서 좌식테이블에 앉아서 쳤는데 .. 

다음부터는 준비 일찍 해서 약간의 긴장감 가지고 집중해서 풀어야겠다 !! 

 

- 문제 난이도를 가리고 시험을 쳐봤다. 약간 긴장된다.. 

문제를 해결하고 나면 난이도가 보이는데 체감 난이도보다 훨씬 낮았다 (= 쉬운 문젠데 어렵게 보임 )


1번 

 

3004번: 체스판 조각

상근이는 3003번에서 동혁이가 발견한 체스판을 톱으로 자르려고 한다. 상근이는 체스판을 최대 N번 자를 수 있으며, 변에 평행하게만 자를 수 있다. 또, 자를 때는 체스판의 그 변의 한쪽 끝에서

www.acmicpc.net

이산수학에 나왔던 내용이라 약간 반가웠다! 

조금만 생각해보면 쉬운 연산 문제 

n=int(input())

if n%2 == 0:
    print((n//2+1)**2)
else :
    print((n//2+1) *(n//2+2))

 

2번 

 

2979번: 트럭 주차

첫째 줄에 문제에서 설명한 주차 요금 A, B, C가 주어진다. (1 ≤ C ≤ B ≤ A ≤ 100) 다음 세 개 줄에는 두 정수가 주어진다. 이 정수는 상근이가 가지고 있는 트럭이 주차장에 도착한 시간과 주차장

www.acmicpc.net

구현/ 시뮬레이션 문제, 리스트로 풀었다. 

a,b,c = map(int,input().split())

cnt_a,cnt_b,cnt_c = 0,0,0
time = []
for i in range(3):
    arrive, leave = map(int,input().split())
    for j in range(arrive,leave):
        time.append(j)

time_set = set(time)
for t in time_set:
    if time.count(t) == 1:
        cnt_a +=1
    elif time.count(t) ==2:
        cnt_b +=1
    elif time.count(t) == 3:
        cnt_c+=1

print(cnt_a*a + cnt_b*2*b + cnt_c*3*c)

 

3번 

 

2804번: 크로스워드 만들기

A의 길이를 N, B의 길이를 M이라고 했을 때, 출력은 총 M줄이고, 각 줄에는 N개 문자가 있어야 한다. 문제 설명에 나온 것 같이 두 단어가 교차된 형태로 출력되어야 한다. 나머지 글자는 '.'로 출력

www.acmicpc.net

카카오에서 좋아한다는.. 문자열 파싱 문제 

A,B = map(str,input().split())

n = len(A)
m = len(B)

cross_word = [['.' for _ in range(n)] for _ in range(m)]

x,y=0,0
xy = []
#A,B에서 처음 ..
for i in range(n):
    for j in range(m):
        if A[i] == B[j]:
            xy.append([i,j])
            break

x=xy[0][0]
y=xy[0][1]

cross_word[y] = A

for i in range(m):
    if cross_word[i][x] == '.' :
        cross_word[i][x]=B[i]




# 마지막
for i in range(m):
     print(''.join(cross_word[i]))

 

in, find에 대해서 공부해보아야겠다 ~~ 

또 마지막 줄에서 ''.join ~이라고 했어야했던걸 ' '.join이라고 해서 틀렸다.. 

세심하게 보아야한다 ! 

 

 

4번 

 

1817번: 짐 챙기는 숌

첫째 줄에 책의 개수 N과 박스에 넣을 수 있는 최대 무게 M이 주어진다. N은 0보다 크거나 같고 50보다 작거나 같은 정수이고, M은 1,000보다 작거나 같은 자연수이다. N이 0보다 큰 경우 둘째 줄에 책

www.acmicpc.net

기본적인 그리디 문제! 

그런데 너무 헷갈려서 저렇게 주석을 마구마구 달아놓았다. 

연습 많이 해야할듯 .. 

n , m =map(int,input().split())
if n == 0 :
    print(0)
    exit()
books = list(map(int,input().split()))

weigh = 0
box = 1
for i in range(n):
    # print(i+1,'번째 책을 담자. --------' ,'box개수는', box)
    if weigh+books[i] > m :
        weigh+=books[i]
        # print('한도 초과 ! ', weigh, '무게 ! ', 'box추가 !')
        box += 1
        weigh = books[i]


    elif weigh+books[i] == m :
        weigh += books[i]
        # print('상자가 꽉 찼다 ! ', weigh, '무게!')

    else :
        weigh += books[i]
        # print('잘 담긴다 ',weigh,' 무게')


print(box)