미새문지

크래프톤 정글 week01, day05 - 알고리즘 학습 본문

크래프톤 정글/TIL

크래프톤 정글 week01, day05 - 알고리즘 학습

문미새 2024. 2. 19. 13:31
728x90

미니프로젝트가 끝나고 오늘부터 알고리즘 이론 학습 및 정글에서 선정해준 코테 문제를 풀기 시작했다.

파이썬은 문법들이 간결하게 나와있어 처음 코딩을 접하는 사람들에겐 좋을 것 같아 열심히 학습 중이다. 하지만 정글의 다른 동기들의 말을 들어보면 기존에 사용하던 언어가 습관이 되어 파이썬의 문법과 헷갈려서 작성하기 까다롭다고 하더라

오늘 푼 문제를 전부 올리는건 너무 길어질 것 같고 어려웠거나 헷갈렸던 문제들만 작성하려고 한다.

1. 백준 2739번 구구단

gugu = int(input())

for i in range(1, 10):
    print(gugu, "*", i, "=", gugu*i)

 

입력받는 n값의 구구단을 출력하는 문제여서 생각보다 쉬운 문제였지만 출력할 때의 문법이 기존의 언어들과 달라 몇번 틀렸었다.

나름 자바스크립트를 독학하며 학습했기에 변수값 + 문자열 출력에서 보통

console.log(gugu + "*" + i + "=" + gugu*i);

이런식으로 작성을 했는데 계속 + 부분에서 에러가 나는데도 기존의 방식을 생각하며 왜 틀렸는지 이해를 못했었다. 파이썬은 + 대신에 ,를 사용하며 완성된 코드를 보면 +보다 간결해서 괜찮은 것 같다.


2. 백준 2562번 최댓값

num = []
compare = []
max = 0
location = 0

for i in range(9):
    num.append(int(input()))
    compare.append(num[i])

compare.sort()
max = compare[len(compare)-1]
location = num.index(max)+1

print(max)
print(location)

 

이 문제는 다른 언어와 별로 차이가 없었기 때문에 문법 부분에선 괜찮았는데 풀었을 당시에 직접 for문을 이용해 max값을 비교하는 구조가 도저히 생각이 나질 않아 sort로 정렬하는 방식을 택해 조금 야매로 푼 것 같다.

이후에 팀원의 해결 방식을 보며 기존의 많이 푸는 방식으로 같이 해결했다.


 

3. 백준 2675번 문자열 반복

count = int(input())
wordsplit = []


for i in range(count):
    inputs = input().split()
    incount = int(inputs[0])
    word = inputs[1]
    wordsplit = list(word)
    wordtotal = ''

    for j in range(0, len(wordsplit)):
        for k in range(0, incount):
            wordtotal += wordsplit[j]

    
    # print(inputs, '-',incount,'-',wordsplit,'-',wordtotal)
    print(wordtotal)

 

이 문제 쯤부터 점점 진도가 안나가기 시작했다. 첫 입력값은 입력될 문제의 개수를, 두 번째부터의 입력값은 반복횟수 + 문자열 이 입력됐다.

예를 들어 2, 3 ABC, 4 /HTP 이렇게 입력이 됐다고 가정했을 때 출력 값은 AAABBBCCC, ////HHHHTTTTPPPP 로 출력이 되야 한다.

단순히 ABCABCABC 같은 연속적인 반복이면 금방 풀었을 텐데, 문자열 값을 또 쪼개서 그 값들을 반복해야 했기에 초반에 알고리즘이 생각이 나질 않아 시간이 오래걸렸었다.

이 다음 문제는 백준 1978번 소수찾기 문제인데 도저히 생각이 나질 않아 내일의 내가 푸는 걸로 하기로 했다.

학습시간 : 10 ~ 25시

728x90