Algorithm 33

[Algorithm/BOJ] 01181 : 단어 정렬.py

문제 알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오. 길이가 짧은 것부터 길이가 같으면 사전 순으로 입력 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. 출력 조건에 따라 정렬하여 단어들을 출력한다. 단, 같은 단어가 여러 번 입력된 경우에는 한 번씩만 출력한다. 내 풀이 n= int(input()) words = [] result = [] for i in range(n): word = input() words.append(word) words.sort() words.sort(key=len) ..

Algorithm/BOJ 2022.07.23

[Algorithm/BOJ] 01110 : 더하기 사이클.py

문제 0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리수로 만들고, 각 자리의 숫자를 더한다. 그 다음 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자. 26부터 시작한다. 2+6=8이다. 새로운 수는 68이다. 6+8=14이다. 새로운 수는 84이다. 8+4=12이다. 새로운 수는 42이다. 4+2=6이다. 새로운 수는 26이다. 위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다. N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시시오. 입력 첫째 줄에 N이 주어진..

Algorithm/BOJ 2022.07.20

[Algorithm / BOJ] 01748 : 수 이어쓰기 1.py

문제 1부터 N까지의 수를 이어서 쓰면 다음과 같이 새로운 하나의 수를 얻을 수 있다. 1234567891011121314151617181920212223... 이렇게 만들어진 새로운 수는 몇 자리 수일까? 이 수의 자릿수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N(1 ≤ N ≤ 100,000,000)이 주어진다. 출력 첫째 줄에 새로운 수의 자릿수를 출력한다. 내 풀이 문자열의 길이를 구하는 방법으로 풀었는데 시간 초과가 떠서 직접 계산하는 코드로 작성하였다 n = int(input()) result = 0 n_len = len(str(n)) if n_len == 1 : result = 1 * n else : for i in range(1,n_len+1): if i == 1: result +=..

Algorithm/BOJ 2022.07.16

[Algorithm / BOJ] 01316 : 그룹 단어 체커.py

문제 그룹 단어란 단어에 존재한는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때문에 그룹 단어이지만, aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다. 단어 N개를 입력으로 받아 그룹 단어의 개수를 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 단어의 개수 N이 들어온다. N은 100보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 단어가 들어온다. 단어는 알파벳 소문자로만 되어있고 중복되지 않으며, 길이는 최대 100이다. 출력 첫째 줄에 그룹 단어의 개수를 출력한다. 내 풀이 # 문제 : https://www.acmicpc.net/..

Algorithm/BOJ 2022.07.16

[Algorithm] 04. 구현 : (3) 왕실의 나이트

문제 행복 왕국의 왕실 정원은 체스판과 같은 8 X 8 좌표 평면이다. 왕실 정원의 특정한 한 칸에 나이트가 서 있다. 나이트는 말을 타고 있기 때문에 이동을 할 때는 L자 형태로만 이동할 수 있으며 정원 밖으로는 나갈 수 없다. 나이트는 특정한 위치에서 다음과 같은 2가지 경우로 이동할 수 있다. 1. 수평으로 두 칸 이동한 뒤에 수직으로 한 칸 이동하기 2. 수직으로 두 칸 이동한 뒤에 수평으로 한 칸 이동하기 이처럼 8 X 8 좌표 평면상에서 나이트의 위치가 주어졌을 때 나이트가 이동할 수 있는 경우의수를 출력하는 프로그램을 작성하시오. 이때 왕실의 정원에서 행 위치를 표현할 때는 1부터 8로 표현하며, 열 위치를 표현 할 때는 a부터 h로 표현한다. 입력 첫째 줄에 8 x 8 좌표 평면상에서 현재..

[Algorithm] 04. 구현 : 개념 & (1) 상하좌우

구현 구현: 머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정 완전 탐색: 모든 경우의 수를 주저 없이 다 계산하는 해결 방법 시뮬레이션: 문제에서 제시한 알고리즘을 한 단계씩 차례대로 직접 수행해야 하는 문제 유형 문제 여행가 A는 N x N 크기의 정사각형 공간 위에 서 있다. 이 공간은 1 x 1 크기의 정사각형으로 나누어져 있다. 가자 왼쪽 위 좌표는 (1,1)이며, 가장 오른쪽 아래 좌표는 (N,N)에 해당한다. 여행가 A는 상, 하, 좌, 우 방향으롣이동할 수 있으며, 시작 좌표는 항상 (1,1)이다. 우리 앞에는 여행가 A가 이동할 계획이 적힌 계획서가 놓여 있다. 계획서에는 하나의 줄에 띄어쓰기를 기준으로 하여 L, R, U, D 중 하나의 문자가 반복적으로 적혀 있다. 각문자의 의미는 L ..

[Algorithm] 03. 그리디 : (4) 1이 될 때까지

문제 어떠한 수 N이 1이 될 때까지 다음의 두 과정 중 하나를 반복적으로 선택하여 수행하려고 한다 단, 두 번재 연산은 N이 K로 나누어떨어질 때만 선택할 수 있다 1. N에서 1을 뺀다 2. N을 K로 나눈다 N과 K가 주어질 때 N이 1이 될 때까지 1번 혹은 2번의 과정을 수행해야 하는 최소 횟수를 구하는 프로그램을 작성하시오 내 풀이 N, K = map(int, input().split(' ')) result = 0 while N != 1 : if N % K != 0 : N -= 1 result += 1 else : N // = K result += 1 print (result) 해답 n, k = map(int, input().split()) result = 0 while n >= k : whi..

[Algorithm] 03. 그리디 : (3) 숫자 카드 게임

문제 숫자 카드 게임은 여러 개의 숫자 카드 중에서 가장 높은 숫자가 쓰인 카드 한 장을 뽑는 게임이다 규칙 숫자가 쓰인 카드들이 N x M 형태로 놓여 있다. 이때 N은 행의 개수를 의미하며, M은 열의 개수를 의미한다 먼저 뽑고자 하는 카드가 포함되어 있는 행을 선택한다 그다음 선택된 행에 포함된 카드들 중 가장 숫자가 낮은 카드를 뽑아야 한다 따라서 처음에 카드를 골라낼 행을 선택할 때, 이후에 해당 행에서 가장 숫자가 낮은 카드를 뽑을 것을 고려하여 최종적으로 가장 높은 숫자의 카드를 뽑을 수 있도록 전략을 세워야 한다 입력조건 첫째 줄에 숫자 카드들이 놓인 행의 개수 N과 열의 개수 M이 공백을 기준으로 하여 각각 자연수로 주어진다 ( 1

[Algorithm] 03. 그리디 : 개념 & (1) 거스름돈 문제

그리디 알고리즘 - 단순하지만 강력한 문제 해결 방법 - 현재 상황에서 지금 당장 좋은 것만 고르는 방법 - 창의력, 즉 문제를 풀기 위한 최소한의 아이디어를 떠올릴 수 있는 능력을 요구 - 기준에 따라 좋은 것을 선택하는 알고리즘이므로 문제에서 기준을 은근히 제시 [예제 3-1] 거스름돈 *문제 카운터에는 거스름돈으로 사용할 500원, 100원, 50원, 10원짜리 동전이 무한히 존재한다고 가정할 때 손님에게 거슬러 줘야 할 돈이 N원 (10의 배수)일 때 거슬러 줘야 할 동전의 최소 개수 *해설 가장 큰 화폐 단위부터 돈을 거슬러 주는 것 N원을 거슬러 줘야 할 때, 가장 먼저 500원으로 거슬러 줄 수 있을 만큼 거슬러 준 후 그다음 100원, 50원, 10원짜리 동전을 차례대로 거슬러 줄 수 있을..

[Algorithm] 공부 방법

공부 교재: 이것이 취업을 위한 코딩 테스트다 with 파이썬 파이썬 문법 공부 '혼자 공부하는 파이썬' 교재 공부 또는 부록 A '코딩 테스트를 위한 파이썬 문법' 읽고 시작 교재 공부 방법 책의 문제 푼 후 온라인 저지 사이트에서 동일 유형의 문제를 풀어본다. 문제를 많이 풀고 복기하는 방법이 실력 향상에 도움이 된다. 개인 블로그나 깃허브에 자신이 푼 문제나 이해한 알고리즘 내용을 자신만의 방법으로 기록한다. 어려운 알고리즘을 만나면 한 번에 완벽하게 이해하려 하지 말고, 여러 번 읽어 체화시켜야 한다. 필자 권장: 총 3번에 걸쳐 읽고, 각 시간을 30시간, 20시간, 10시간으로 쪼개서 점점 더 속도를 올리는 방법을 권한다. 틈날 때마다 책을 펼쳐 보고 알고리즘 문제와 소스코드 유형에 익숙해지는..