코테 공부/Computer Algorithm

    [2024 알고리즘 특강] 공항 방문수 (파이썬)

    문제XX 공항에서N 일동안매일공항방문객수를조사했습니다. 이때, 가장많은방문객수와두 번째로많은방문객수의차이를구하려고합니다. 단, 방문객의수가같은날은없다고 가정합니다.이를 위해 다음과 같이 4단계로 간단히 프로그램 구조를 작성했습니다.1. 입력으로 주어진 배열에서 가장 많은 방문객 수를 찾습니다. 2. 1번 단계에서 찾은 값을제외하고, 나머지 값들로 이루어진 새로운 배열을 만듭니다.3. 2번 단계에서 만든 새로운 배열에서 가장 큰 방문객의 수를 찾습니다. 4. 1번 단계와 3번 단계에서 구한 값의 차이를 구합니다.N 일 동안의 방문객 수가 들어있는 배열 visitor가 매개변수로 주어질 때, 가장 많은 방문객 수와 두 번째로 많은 방문객 수의 차이를 return 하도록 solution 함수를 작성하세요. 입..

    [2024 알고리즘 특강] 가장 긴 팰린드롬 - 프로그래머스 (파이썬)

    [2024 알고리즘 특강] 가장 긴 팰린드롬 - 프로그래머스 (파이썬)

    https://school.programmers.co.kr/learn/courses/30/lessons/12904 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제앞뒤를 뒤집어도 똑같은 문자열을 팰린드롬(palindrome)이라고 합니다.문자열 s가 주어질 때, s의 부분문자열(Substring)중 가장 긴 팰린드롬의 길이를 return 하는 solution 함수를 완성해 주세요.예를들면, 문자열 s가 "abcdcba"이면 7을 return하고 "abacde"이면 3을 return합니다.제한사항- 문자열 s의 길이 : 2,500 이하의 자연수 - 문자열 s..

    [2024 알고리즘 특강] 문자열/회문 (파이썬)

    문제회문이란 어떤 단어를 앞으로 읽던 거꾸로 읽던 같은 단어 혹은 문장을 말합니다. 예를 들어 civic, radar, level, rotor, refer 같은 단어는 회문입니다. 소문자 알파벳, 공백(“ “), 마침표(.)로 이루어진 문장에서 알파벳만 추출하였을 때 회문이면 회문 문장이 됩니다. “never odd or even.”과 같은 문장은 회문입니다. 소문자 알파벳, 공백(“ “), 마침표(.)로 이루어진 문장이 회문인지 아닌지를 return 하는 solution 함수를 작성하세요. 입력sentencereturn"never odd or even"true"palindrome"false 예시 #1 알파벳과 숫자만 추출하여 소문자로 변환해보면 "neveroddoreven"이 되며 이 단어는 팰린드롬입..

    [이코테] 두 배열의 원소 교체 (파이썬)

    [이코테] 두 배열의 원소 교체 (파이썬)

    정답 n, k = map(int, input().split()) a = list(map(int, input().split())) b = list(map(int, input().split())) a.sort() b.sort(reverse=True) # 내림차순 for i in range(k): if a[i] < b[i]: a[i], b[i] = b[i], a[i] else: break print(sum(a)) 배운 점: 이 문제를 통해 파이썬 문법과 sort()에 대해 알게 되었다. sort()는 자동으로 오름차순으로 정리해주며 reverse=True를 입력하면 내림차순으로도 정렬이 가능하다. 또한 교체가 너무나도 간결하게 작성이 가능하다! 만약 a과 b값을 서로 교환하고 싶다면 이렇게 한 줄로 작성하면 ..

    [이코테] 정렬 알고리즘 코드 정리 (파이썬)

    array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8] # 선택 정렬 for i in range(len(array)): min_index = i # 가장 작은 원소의 인덱스 for j in range(i+1, len(array)): if array[min_index] > array[j]: min_index = j array[i], array[min_index] = array[min_index], array[i] # 스와프 print("선택 정렬 = ", array) # 삽입 정렬 for i in range(1, len(array)): for j in range(i, 0, -1): if array[j] < array[j-1]: # 한 칸씩 왼쪽으로 이동 array[j], array[j-1] ..

    [이코테]  구현 - 상하좌우 (파이썬)

    [이코테] 구현 - 상하좌우 (파이썬)

    내 풀이 size = int(input()) direction = list(input().split()) result = [1, 1] for i in range(len(direction)): if ((direction[i] == 'L' and result[1] == 1) or (direction[i] == 'U' and result[0] == 1) or (direction[i] == 'R' and result[1] == size) or (direction[i] == 'D' and result[0] == size)): continue elif (direction[i] == 'L'): result[1] = result[1] - 1 elif (direction[i] == 'U'): result[0] = res..

    [이코테] 그리디 알고리즘 - 곱하기 혹은 더하기 (파이썬)

    [이코테] 그리디 알고리즘 - 곱하기 혹은 더하기 (파이썬)

    내 풀이 n = list(map(int, input())) sum = 0 for i in range(len(n) - 1): if (n[i] * n[i + 1] >= n[i] + n[i + 1]): n[i + 1] = n[i] * n[i + 1] else: n[i + 1] = n[i] + n[i + 1] sum = n[i + 1] print(sum) 정답 배운 점: 결과 값을 단순히 0으로 초기화 시켰지만 정답을 확인해보니 result를 int(data[0])로 초기화하여 첫 번째 숫자를 기본값으로 설정한 것으로 보고 초기값 설정 방법을 깨달았습니다. 그리고 내가 쓴 for문 코드는 직관적으로 파악하기 힘들지만, 정답 코드를 보면서 훨씬 직관적이고 간결하게 쓰는 방법도 알게 되었다.

    [이코테] 그리디 알고리즘 - 1이 될 때까지 (파이썬)

    [이코테] 그리디 알고리즘 - 1이 될 때까지 (파이썬)

    내 풀이 n, k = map(int, input().split()) count = 0 while (n != 1): if (n % k == 0): n = n / k count += 1 else: n -= 1 count += 1 continue print(count) 정답 느낀점 오답노트 : N이 커질수록 시간 초과가 발생할 수 있기 때문에 일일히 1을 빼는건 비효율적이라는 것을 알게 되었다. N이 100억 이상의 큰 수가 되는 경우에도 효율적으로 실행하기 위해서 N이 K의 배수가 되도록 한번에 빼는 방식을 사용해야 한다. 정답 맞춰서 푸는 것도 중요하지만, 효율을 생각해서 적절한 알고리즘을 사용하고 설계하는 사고를 기르는게 더 중요하다고 느끼게 되었다.