코딩테스트 입문
-
1. 문자열 밀기 (문제 설명, 제한사항, 입출력 예) 문자열 A와 B가 주어질 때, A를 밀어서 B가 될 수 있다면, 밀어야 하는 최소 횟수를 구하라는 문제이다. 만약, 밀어서 B가 될 수 없으면 -1을 반환하면 된다. (내가 생각한 풀이 과정) 차례대로 조건을 세 개로 나누어서 문제를 풀었다. 첫 번째, A와 B가 같은 경우 -> 0을 반환 두 번째, A와 B를 한 칸씩 밀면서 두 문자열을 비교 -> shift의 숫자대로 밀면서 문자열을 "A[-shift:] + A[0:-shift]" 형태로 비교 세 번째, A의 길이만큼 밀었는데도 (한바퀴 돈 경우) 같은 값이 나오지 않는 경우 -> -1 반환 (될 수 없다고 판단) (코드) 더보기 💡 내 코드 def solution(A, B): shift = 1 ..
[Programmers/Lv. 0] 코딩테스트 입문 Day 25 - 시뮬레이션, 조건문, 수학 (Python)1. 문자열 밀기 (문제 설명, 제한사항, 입출력 예) 문자열 A와 B가 주어질 때, A를 밀어서 B가 될 수 있다면, 밀어야 하는 최소 횟수를 구하라는 문제이다. 만약, 밀어서 B가 될 수 없으면 -1을 반환하면 된다. (내가 생각한 풀이 과정) 차례대로 조건을 세 개로 나누어서 문제를 풀었다. 첫 번째, A와 B가 같은 경우 -> 0을 반환 두 번째, A와 B를 한 칸씩 밀면서 두 문자열을 비교 -> shift의 숫자대로 밀면서 문자열을 "A[-shift:] + A[0:-shift]" 형태로 비교 세 번째, A의 길이만큼 밀었는데도 (한바퀴 돈 경우) 같은 값이 나오지 않는 경우 -> -1 반환 (될 수 없다고 판단) (코드) 더보기 💡 내 코드 def solution(A, B): shift = 1 ..
2023.06.07 -
1. 치킨 쿠폰 (문제 설명, 제한사항, 입출력 예) 치킨 한 마리당 쿠폰을 한 장 발급해 주는 치킨집이 있다. 쿠폰을 열장 모으면 치킨을 한 마리 서비스로 받을 수 있고, 서비스로 주는 치킨에도 쿠폰을 발급해 준다. 시켜 먹은 치킨의 수가 주어질 때, 받을 수 있는 최대 서비스 치킨의 수를 구하라는 문제이다. (내가 생각한 풀이 과정) 총 서비스를 받은 치킨의 수를 저장할 정수 변수 answer를 만들어둔다. 이제 10마리를 기준으로 입력값 chicken을 계속 반복시킬 거다. 어떻게 반복할 거냐면. 1) 입력값 chicken을 10으로 나누어서 서비스로 받은 치킨의 값을 answer에 추가한다. 2) chicken에는 10으로 나누고 남은 나머지 값과 + 서비스로 받은 치킨의 값을 저장해 둔다 (서비..
[Programmers/Lv. 0] 코딩테스트 입문 Day 24 - 수학, 시뮬레이션, 문자열, 조건문, 반복문 (Python)1. 치킨 쿠폰 (문제 설명, 제한사항, 입출력 예) 치킨 한 마리당 쿠폰을 한 장 발급해 주는 치킨집이 있다. 쿠폰을 열장 모으면 치킨을 한 마리 서비스로 받을 수 있고, 서비스로 주는 치킨에도 쿠폰을 발급해 준다. 시켜 먹은 치킨의 수가 주어질 때, 받을 수 있는 최대 서비스 치킨의 수를 구하라는 문제이다. (내가 생각한 풀이 과정) 총 서비스를 받은 치킨의 수를 저장할 정수 변수 answer를 만들어둔다. 이제 10마리를 기준으로 입력값 chicken을 계속 반복시킬 거다. 어떻게 반복할 거냐면. 1) 입력값 chicken을 10으로 나누어서 서비스로 받은 치킨의 값을 answer에 추가한다. 2) chicken에는 10으로 나누고 남은 나머지 값과 + 서비스로 받은 치킨의 값을 저장해 둔다 (서비..
2023.06.06 -
1. 특이한 정렬 (문제 설명, 제한사항, 입출력 예) 배열 numlist와 정수 n이 주어질 때, numlist의 원소를 n으로부터 가까운 순서대로 정렬한 배열을 구하라는 문제이다. 만약 n으로부터 거리가 같다면, 더 큰 수를 앞에 오도록 배치하면 된다. 단, numlist 배열은 중복된 원소를 갖지 않는다. n의 범위는 1 이상, 10,000 이하로 제한한다. (내가 생각한 풀이 과정) 이 문제는 내가 처음 생각했던 것과 다르게 몇 번의 "도약"이 필요했던 문제였다. 처음 생각한 풀이 과정과 나의 도약을 함께 따라가면서 이해해 보자. 우선, 처음 생각한 풀이 과정은 간단했다. n과 가까운 수를 구하기 위해 num에서 n을 빼 절댓값을 씌워준 후, 새로운 리스트 1에 추가하고, 값이 작은 순서대로 새로..
[Programmers/Lv. 0] 코딩테스트 입문 Day 23 - 배열, 정렬, 문자열 (Python)1. 특이한 정렬 (문제 설명, 제한사항, 입출력 예) 배열 numlist와 정수 n이 주어질 때, numlist의 원소를 n으로부터 가까운 순서대로 정렬한 배열을 구하라는 문제이다. 만약 n으로부터 거리가 같다면, 더 큰 수를 앞에 오도록 배치하면 된다. 단, numlist 배열은 중복된 원소를 갖지 않는다. n의 범위는 1 이상, 10,000 이하로 제한한다. (내가 생각한 풀이 과정) 이 문제는 내가 처음 생각했던 것과 다르게 몇 번의 "도약"이 필요했던 문제였다. 처음 생각한 풀이 과정과 나의 도약을 함께 따라가면서 이해해 보자. 우선, 처음 생각한 풀이 과정은 간단했다. n과 가까운 수를 구하기 위해 num에서 n을 빼 절댓값을 씌워준 후, 새로운 리스트 1에 추가하고, 값이 작은 순서대로 새로..
2023.06.06 -
1. 저주의 숫자 3 (문제 설명, 제한사항, 입출력 예) 3의 배수와 숫자 3을 사용하지 않는 3x 마을 사람들이 있다. 주어진 정수 n을 3x 마을에서 사용하는 숫자로 바꿔서 구하라는 문제이다. (단, 정수 n의 범위는 1 이상, 100 이하) (내가 생각한 풀이 과정) 고려해줘야 하는 조건은 두 가지이다. 3의 배수일 경우 (answer % 3 == 0)와 숫자 3이 들어가 있는 경우 (str(answer).count('3')) 3x 마을은 위 조건의 경우 해당 숫자를 건너뛰기 때문에 +1을 해주면 된다. 주어진 수 n이 0이 될 때까지 1씩 빼보면서 해당 조건을 확인하면서 얼마큼을 건너뛰어야 하는지를 파악할 수 있다. (코드) 더보기 💡 내 코드 def solution(n): answer = 0 ..
[Programmers/Lv. 0] 코딩테스트 입문 Day 22 - dp, 수학, 조건문, 배열 (Python)1. 저주의 숫자 3 (문제 설명, 제한사항, 입출력 예) 3의 배수와 숫자 3을 사용하지 않는 3x 마을 사람들이 있다. 주어진 정수 n을 3x 마을에서 사용하는 숫자로 바꿔서 구하라는 문제이다. (단, 정수 n의 범위는 1 이상, 100 이하) (내가 생각한 풀이 과정) 고려해줘야 하는 조건은 두 가지이다. 3의 배수일 경우 (answer % 3 == 0)와 숫자 3이 들어가 있는 경우 (str(answer).count('3')) 3x 마을은 위 조건의 경우 해당 숫자를 건너뛰기 때문에 +1을 해주면 된다. 주어진 수 n이 0이 될 때까지 1씩 빼보면서 해당 조건을 확인하면서 얼마큼을 건너뛰어야 하는지를 파악할 수 있다. (코드) 더보기 💡 내 코드 def solution(n): answer = 0 ..
2023.06.05 -
1. 숨어있는 숫자의 덧셈 (2) (문제 설명, 제한사항, 입출력 예) 소문자, 대문자, 자연수로만 구성되어 있는 문자열 my_string이 주어질 때, my_string 안에 있는 자연수들의 합을 구하라는 문제이다. 단, 연속된 수는 하나의 숫자로 간주한다. my_string 문자열에 자연수가 없는 경우에는 0을 반환한다. (내가 생각한 풀이 과정) 어려운 코드는 아니지만, 설명이 조금 어려워 사용한 코드도 함께 설명을 하겠다. 우선, 문자열(my_string)을 하나씩 반복하면서 요소(i)가 숫자인지 아닌지를 판별(isdigit() 함수 사용)해준다. 이때, 가장 고려해야 할 점이 "연속된 수는 하나의 숫자로 간주한다"는 점이었다. 즉, 단순히 숫자라고 더하기를 더해주면 안 되고, 이후의 수, 그 이..
[Programmers/Lv. 0] 코딩테스트 입문 Day 21 - 문자열, 사칙연산, 시뮬레이션, 2차원배열, 수학, 배열 (Python)1. 숨어있는 숫자의 덧셈 (2) (문제 설명, 제한사항, 입출력 예) 소문자, 대문자, 자연수로만 구성되어 있는 문자열 my_string이 주어질 때, my_string 안에 있는 자연수들의 합을 구하라는 문제이다. 단, 연속된 수는 하나의 숫자로 간주한다. my_string 문자열에 자연수가 없는 경우에는 0을 반환한다. (내가 생각한 풀이 과정) 어려운 코드는 아니지만, 설명이 조금 어려워 사용한 코드도 함께 설명을 하겠다. 우선, 문자열(my_string)을 하나씩 반복하면서 요소(i)가 숫자인지 아닌지를 판별(isdigit() 함수 사용)해준다. 이때, 가장 고려해야 할 점이 "연속된 수는 하나의 숫자로 간주한다"는 점이었다. 즉, 단순히 숫자라고 더하기를 더해주면 안 되고, 이후의 수, 그 이..
2023.06.04 -
1. 7의 개수 (문제 설명, 제한사항, 입출력 예) 정수 배열이 주어질 때, 배열 안에 7이 총 몇 개 있는지 구하라는 문제이다. (내가 생각한 풀이 과정) 파이썬 문자열에는 count()라는 찾고 싶은 문자의 개수를 구할 수 있는 내장 함수가 존재한다. 배열 속에 들어있는 요소들을 하나의 문자열로 변환한 후, count 함수를 이용해서 7의 개수를 구하면 된다. (코드) 더보기 💡 내 코드 def solution(array): return str(array).count('7') 2. 잘라서 배열로 저장하기 (문제 설명, 제한사항, 입출력 예) 주어진 문자열을 주어진 정수만큼 잘라서 저장한 배열을 반환하라는 문제이다. (내가 생각한 풀이 과정) 문자열(my_str) 속에 있는 한 문자(i)씩 반복을 하..
[Programmers/Lv. 0] 코딩테스트 입문 Day 19 - 문자열, 배열, 조건문 (Python)1. 7의 개수 (문제 설명, 제한사항, 입출력 예) 정수 배열이 주어질 때, 배열 안에 7이 총 몇 개 있는지 구하라는 문제이다. (내가 생각한 풀이 과정) 파이썬 문자열에는 count()라는 찾고 싶은 문자의 개수를 구할 수 있는 내장 함수가 존재한다. 배열 속에 들어있는 요소들을 하나의 문자열로 변환한 후, count 함수를 이용해서 7의 개수를 구하면 된다. (코드) 더보기 💡 내 코드 def solution(array): return str(array).count('7') 2. 잘라서 배열로 저장하기 (문제 설명, 제한사항, 입출력 예) 주어진 문자열을 주어진 정수만큼 잘라서 저장한 배열을 반환하라는 문제이다. (내가 생각한 풀이 과정) 문자열(my_str) 속에 있는 한 문자(i)씩 반복을 하..
2023.06.03 -
1. 문자열안에 문자열 (문제 설명, 제한사항, 입출력 예) 문자열 str1과 str2가 주어질 때, str1 안에 str2가 들어 있다면 1을, str2가 없다면 2를 반환하라는 문제이다. (내가 생각한 풀이 과정) 앞에서도 많이 풀어봤지만, 문자열은 파이썬의 in 연산을 사용할 수 있다는 것을 이용했다. (코드) 더보기 💡 내 코드 def solution(str1, str2): return 1 if str2 in str1 else 2 2. 제곱수 판별하기 (문제 설명, 제한사항, 입출력 예) 주어진 정수가 제곱수라면 1을, 제곱수가 아니라면 2를 반환하라는 문제이다. (내가 생각한 풀이 과정) 제곱근을 구하는 sqrt() 함수를 사용했다. 주어진 수의 제곱근이 정수라면, 주어진 수가 제곱수라고 판단할..
[Programmers/Lv. 0] 코딩테스트 입문 Day 18 - 문자열, 수학, 조건문, 정렬 (Python)1. 문자열안에 문자열 (문제 설명, 제한사항, 입출력 예) 문자열 str1과 str2가 주어질 때, str1 안에 str2가 들어 있다면 1을, str2가 없다면 2를 반환하라는 문제이다. (내가 생각한 풀이 과정) 앞에서도 많이 풀어봤지만, 문자열은 파이썬의 in 연산을 사용할 수 있다는 것을 이용했다. (코드) 더보기 💡 내 코드 def solution(str1, str2): return 1 if str2 in str1 else 2 2. 제곱수 판별하기 (문제 설명, 제한사항, 입출력 예) 주어진 정수가 제곱수라면 1을, 제곱수가 아니라면 2를 반환하라는 문제이다. (내가 생각한 풀이 과정) 제곱근을 구하는 sqrt() 함수를 사용했다. 주어진 수의 제곱근이 정수라면, 주어진 수가 제곱수라고 판단할..
2023.06.02 -
1. 숫자 찾기 (문제 설명, 제한사항, 입출력 예) 정수 num과 k가 주어질 때, 정수 num 중에서 k가 있다면 정수 num에서의 k가 있는 자릿수를 반환하라는 문제이다. 만약에, 정수 k가 num 안에 없다면 -1을 반환하도록 한다. num에 k가 여러 개 있다면, 가장 처음 나타나는 자리를 반환하면 된다. (내가 생각한 풀이 과정) 인덱스가 아니라 자릿수를 반환하라는 문제이므로, 결국은 인덱스를 찾아, 마지막에는 +1을 해줘야 한다는 것이 먼저 떠올랐다. find() 함수를 사용해서 인덱스를 찾아주었다. 단, find() 함수를 사용하기 위해 주어진 정수들은 문자열로 변환해서 사용했다. (코드) 더보기 💡 내 코드 def solution(num, k): answer = str(num).find(..
[Programmers/Lv. 0] 코딩테스트 입문 Day 17 - 문자열, 수학, 조건문, 배열, 사칙연산 (Python)1. 숫자 찾기 (문제 설명, 제한사항, 입출력 예) 정수 num과 k가 주어질 때, 정수 num 중에서 k가 있다면 정수 num에서의 k가 있는 자릿수를 반환하라는 문제이다. 만약에, 정수 k가 num 안에 없다면 -1을 반환하도록 한다. num에 k가 여러 개 있다면, 가장 처음 나타나는 자리를 반환하면 된다. (내가 생각한 풀이 과정) 인덱스가 아니라 자릿수를 반환하라는 문제이므로, 결국은 인덱스를 찾아, 마지막에는 +1을 해줘야 한다는 것이 먼저 떠올랐다. find() 함수를 사용해서 인덱스를 찾아주었다. 단, find() 함수를 사용하기 위해 주어진 정수들은 문자열로 변환해서 사용했다. (코드) 더보기 💡 내 코드 def solution(num, k): answer = str(num).find(..
2023.05.31 -
1. 편지 (문제 설명, 제한사항, 입출력 예) 글자 한 자가 가로 2cm 크기로 되게 편지를 쓸 때, 축하 문구 nessage 문자열을 적기 위해 필요한 편지지의 최소 가로길이를 구하라는 문제이다. (내가 생각한 풀이 과정) 문자열 길이의 곱하기 2배 해주면 된다. (코드) 더보기 💡 내 코드 def solution(message): return len(message)*2 2. 가장 큰 수 찾기 (문제 설명, 제한사항, 입출력 예) 정수 배열이 주어질 때, 가장 큰 수와 그 수의 인덱스를 담은 배열을 구하라는 문제이다. (내가 생각한 풀이 과정) 최댓값을 구하는 max() 함수와 인덱스를 구하는 index() 함수를 이용하면 된다. (오늘 문제들 왜이렇게 쉬운 거야) (코드) 더보기 💡 내 코드 def..
[Programmers/Lv. 0] 코딩테스트 입문 Day 16 - 문자열, 수학, 배열, 조건문 (Python)1. 편지 (문제 설명, 제한사항, 입출력 예) 글자 한 자가 가로 2cm 크기로 되게 편지를 쓸 때, 축하 문구 nessage 문자열을 적기 위해 필요한 편지지의 최소 가로길이를 구하라는 문제이다. (내가 생각한 풀이 과정) 문자열 길이의 곱하기 2배 해주면 된다. (코드) 더보기 💡 내 코드 def solution(message): return len(message)*2 2. 가장 큰 수 찾기 (문제 설명, 제한사항, 입출력 예) 정수 배열이 주어질 때, 가장 큰 수와 그 수의 인덱스를 담은 배열을 구하라는 문제이다. (내가 생각한 풀이 과정) 최댓값을 구하는 max() 함수와 인덱스를 구하는 index() 함수를 이용하면 된다. (오늘 문제들 왜이렇게 쉬운 거야) (코드) 더보기 💡 내 코드 def..
2023.05.30 -
1. 컨트롤 제트 (문제 설명, 제한사항, 입출력 예) 숫자와 "Z"가 공백으로 구분되어 있는 문자열이 주어진다. 문자열에 있는 숫자들을 차례대로 더하려고 하는데, 만약 "Z"가 나오게 되는 경우에는 "Z" 이전에 있는 숫자를 계산 값에서 뺄 것이다. 위에 주어진 규칙에 따라 반환되는 올바른 값을 구하라는 문제이다. (내가 생각한 풀이 과정) 우선, 문자열 안에 있는 숫자와 "Z" 알파벳은 공백으로 구분되어 있기에 split(" ") 함수를 이용해서 리스트에 담아주었다. 입력 문자열이 "1 2 Z 3"인 경우에는 ["1", "2", "Z", "3"]의 형태로 리스트에 담기게 된다. "Z" 앞에 있는 숫자를 처리하는 방법은 우선 두 가지가 떠올랐다. 첫째는 "Z" 앞에 있는 숫자를 따로 조치하지 않고 그냥..
[Programmers/Lv. 0] 코딩테스트 입문 Day 13 - 문자열, 배열, 사칙연산, 수학, 조건문 (Python)1. 컨트롤 제트 (문제 설명, 제한사항, 입출력 예) 숫자와 "Z"가 공백으로 구분되어 있는 문자열이 주어진다. 문자열에 있는 숫자들을 차례대로 더하려고 하는데, 만약 "Z"가 나오게 되는 경우에는 "Z" 이전에 있는 숫자를 계산 값에서 뺄 것이다. 위에 주어진 규칙에 따라 반환되는 올바른 값을 구하라는 문제이다. (내가 생각한 풀이 과정) 우선, 문자열 안에 있는 숫자와 "Z" 알파벳은 공백으로 구분되어 있기에 split(" ") 함수를 이용해서 리스트에 담아주었다. 입력 문자열이 "1 2 Z 3"인 경우에는 ["1", "2", "Z", "3"]의 형태로 리스트에 담기게 된다. "Z" 앞에 있는 숫자를 처리하는 방법은 우선 두 가지가 떠올랐다. 첫째는 "Z" 앞에 있는 숫자를 따로 조치하지 않고 그냥..
2023.05.28 -
1. 모음 제거 (문제 설명, 제한사항, 입출력 예) 문자열이 주어질 때, 모음 (a, e, i, o, u)를 제거한 문자열을 반환하라는 문제이다. (내가 생각한 풀이 과정) 예전에 배웠던 정규 표현식(re.sub)을 이번에는 이용해 보기로 했다. 정규 표현식이란 re.sub(정규 표현식, 치환 문자 (변경하고 싶은 문자), 대상 문자열)의 형태로 사용하는 파이썬의 기능이며, 이 코드에서는 대상 문자인 [aeiou]의 형태로 정규표현식을 표현하고, 해당 문자를 제거할 것이기 때문에 치환문자는 ""(공란)이 되겠다. 마지막으로, 대상 문자열은 매개변수로 들어오는 문자열 my_string로 설정해 주면 원하는 형태로 반환해 줄 수 있다. (코드) 더보기 💡 내 코드 import re def solution(..
[Programmers/Lv. 0] 코딩테스트 입문 Day 12 - 문자열, 정렬, 사칙연산, 수학 (Python)1. 모음 제거 (문제 설명, 제한사항, 입출력 예) 문자열이 주어질 때, 모음 (a, e, i, o, u)를 제거한 문자열을 반환하라는 문제이다. (내가 생각한 풀이 과정) 예전에 배웠던 정규 표현식(re.sub)을 이번에는 이용해 보기로 했다. 정규 표현식이란 re.sub(정규 표현식, 치환 문자 (변경하고 싶은 문자), 대상 문자열)의 형태로 사용하는 파이썬의 기능이며, 이 코드에서는 대상 문자인 [aeiou]의 형태로 정규표현식을 표현하고, 해당 문자를 제거할 것이기 때문에 치환문자는 ""(공란)이 되겠다. 마지막으로, 대상 문자열은 매개변수로 들어오는 문자열 my_string로 설정해 주면 원하는 형태로 반환해 줄 수 있다. (코드) 더보기 💡 내 코드 import re def solution(..
2023.05.28 -
1. 주사위의 개수 (문제 설명, 제한사항, 입출력 예) 가로, 세로, 높이가 순서대로 주어지는 배열 box와 정육면체 주사위의 모서리 길이 n이 매개변수로 주어졌을 때, 직육면체 box 안에 정육면체 주사위를 최대한 많이 채울 수 있는 개수를 반환하라는 문제이다. (내가 생각한 풀이 과정) 결국은 n에 따라서 box 안에 들어갈 수 있는 개수가 갈리는 문제라고 생각했다. 어차피 주사위는 "정육면체"라고 문제 조건 안에 주어졌기 때문에 박스의 가로, 세로, 높이 각각 별로 나누어 떨어지는 수를 구해 모두 곱해주면 그것이 주사위가 들어갈 수 있는 수가 된다. 나누어 떨어지는 수는 파이썬의 "//" 연산을 이용하면 된다고 생각했다. (코드) 더보기 💡 내 코드 def solution(box, n): retu..
[Programmers/Lv. 0] 코딩테스트 입문 Day 11 - 수학, 반복문 (Python)1. 주사위의 개수 (문제 설명, 제한사항, 입출력 예) 가로, 세로, 높이가 순서대로 주어지는 배열 box와 정육면체 주사위의 모서리 길이 n이 매개변수로 주어졌을 때, 직육면체 box 안에 정육면체 주사위를 최대한 많이 채울 수 있는 개수를 반환하라는 문제이다. (내가 생각한 풀이 과정) 결국은 n에 따라서 box 안에 들어갈 수 있는 개수가 갈리는 문제라고 생각했다. 어차피 주사위는 "정육면체"라고 문제 조건 안에 주어졌기 때문에 박스의 가로, 세로, 높이 각각 별로 나누어 떨어지는 수를 구해 모두 곱해주면 그것이 주사위가 들어갈 수 있는 수가 된다. 나누어 떨어지는 수는 파이썬의 "//" 연산을 이용하면 된다고 생각했다. (코드) 더보기 💡 내 코드 def solution(box, n): retu..
2023.05.27