📝 [Lv0] 직각삼각형 출력하기
👀 문제 설명
"*"의 높이와 너비를 1이라고 했을 때, "*"을 이용해 직각 이등변 삼각형을 그리려고합니다. 정수 n 이 주어지면 높이와 너비가 n 인 직각 이등변 삼각형을 출력하도록 코드를 작성해보세요.
🚨 제한 사항
- 1 ≤ n ≤ 10
💻 입출력 예
입력 #1
3
출력 #1
*
**
***
✨ 풀이 설명
입력 형식이 다른 문제들과 다르다. 그냥 함수를 반환하는 이전과는 다르게, 입력만을 받아 출력을 하는 readline으로 하도록 되어있다. 백준 같은 경우는 이런 식으로 입력을 받도록 되어 있어, 이 방법도 알아두면 좋을 것 같다.
기본 형식은 다음과 같다.
각 입력에 맞게 입력받았을 때, 입력값을 저장할 로직이나, 입력이 끝난 후, 문제를 풀기 위한 로직을 작성해 주면 된다.
나는 입력을 받을 때, trim()으로 문자열의 앞뒤 공백을 제거한 후, 숫자로 형변환하여 input 배열에 추가해 주었다.
print()라는 함수에 길이를 받아 1부터 해당 길이까지의 '*'을 반복한 문자열을 다시 input에 넣어주었다.
입력이 종료된 후, 함수에 input에 처음 받은 길이를 꺼내 인수로 넣어주고, 함수가 종료된 후, '*' 문자열을 한 줄씩 띄어 하나의 문자열로 만들어 console로 출력해 주었다.
🕵️♂️ 코드
📝 [Lv0] 숨어있는 숫자의 덧셈 (2)
👀 문제 설명
문자열 my_string이 매개변수로 주어집니다. my_string은 소문자, 대문자, 자연수로만 구성되어있습니다. my_string안의 자연수들의 합을 return하도록 solution 함수를 완성해주세요.
🚨 제한 사항
- 1 ≤ my_string의 길이 ≤ 1,000
- 1 ≤ my_string 안의 자연수 ≤ 1000
- 연속된 수는 하나의 숫자로 간주합니다.
- 000123과 같이 0이 선행하는 경우는 없습니다.
- 문자열에 자연수가 없는 경우 0을 return 해주세요.
💻 입출력 예
my_string | result |
"aAb1B2cC34oOp" | 37 |
"1a2b3c4d123Z" | 133 |
✨ 풀이 설명
문자열에서 문자를 기준으로 split()을 해주었다. 이렇게 되면, 문자는 사라지고 숫자만 남게 된다. split()에는 정규식 또한 쓸 수 있기 때문에 a-z까지 대소문자 가리지 않고(i flag) 잘라주었다.
그러면, 숫자와 빈 문자열로 이루어진 배열이 나오게 되는데, 이 배열의 원소들을 숫자로 형변환하여 더해주면 된다.
빈 문자열은 숫자로 형변환하면 어차피 0이기 때문에 굳이 따로 생각할 필요가 없다.
🕵️♂️ 코드
📝 [Lv0] 삼각형의 완성조건 (2)
👀 문제 설명
선분 세 개로 삼각형을 만들기 위해서는 다음과 같은 조건을 만족해야 합니다.
- 가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 합니다.
삼각형의 두 변의 길이가 담긴 배열 sides이 매개변수로 주어집니다. 나머지 한 변이 될 수 있는 정수의 개수를 return하도록 solution 함수를 완성해주세요.
🚨 제한 사항
- sides의 원소는 자연수입니다.
- sides의 길이는 2입니다.
- 1 ≤ sides의 원소 ≤ 1,000
💻 입출력 예
sides | result |
[1, 2] | 1 |
[3, 6] | 5 |
[11, 7] | 13 |
✨ 풀이 설명
삼각형의 완성 조건을 만족하려면, sides에 있는 큰 수가 가장 긴 변이 되거나, sides의 큰 수와 주어지지 않은 수의 길이가 같거나, 주어지지 않은 변이 가장 긴 변이 되어야 한다.
즉, sides의 수 a, b 중 a가 큰 수일 때, 다른 변 c의 길이는 c < a && a < c + b
sides의 수 a, b 중 a가 큰 수일 때, a와 c가 같은 길이인 a === c
다른 변 c의 길이가 가장 긴 c < a + b
를 만족해야 삼각형이 이뤄질 수 있다.
따라서 위의 세 조건을 모두 만족하는 식은 sides 중 큰 수 - 작은 수 < c < sides 중 큰 수 + 작은 수가 된다.
이를 변형하면 큰 수 + 작은 수 - (큰 수 - 작은 수) - 1이 되고, 이는 즉, 작은 수 * 2 -1과 같은 결과가 된다.
🕵️♂️ 코드
📝 [Lv0] 직사각형 넓이 구하기
👀 문제 설명
2차원 좌표 평면에 변이 축과 평행한 직사각형이 있습니다. 직사각형 네 꼭짓점의 좌표 [[x1, y1], [x2, y2], [x3, y3], [x4, y4]]가 담겨있는 배열 dots가 매개변수로 주어질 때, 직사각형의 넓이를 return 하도록 solution 함수를 완성해보세요.
🚨 제한 사항
- dots의 길이 = 4
- dots의 원소의 길이 = 2
- -256 < dots[i]의 원소 < 256
- 잘못된 입력은 주어지지 않습니다.
💻 입출력 예
dots | result |
[[1, 1], [2, 1], [2, 2], [1, 2]] | 1 |
[[-1, -1], [1, 1], [1, -1], [-1, 1]] | 4 |
✨ 풀이 설명
직사각형이 되려면 변의 기울기가 x축이나 y축에 평행해야 한다. 즉, 두 점은 x좌표가 같거나, y좌표가 같다.
이를 이용해 sort()로 정렬을 해주면 앞의 두 점과 뒤의 두 점은 x좌표가 같고, 앞의 두 점의 y좌표는 높이가 된다.
즉, 가로는 dots의 세 번째 점의 x좌표 - 첫 번째 점의 x좌표가 되고, 세로는 dots의 첫 번째와 두 번째 점의 y좌표의 차가 된다.
세로의 길이를 구하기 위해 두 점의 y좌표의 차를 Math.abs()로 절댓값을 구해주었다.
🕵️♂️ 코드
📝 [Lv0] 소인수분해
👀 문제 설명
소인수분해란 어떤 수를 소수들의 곱으로 표현하는 것입니다. 예를 들어 12를 소인수 분해하면 2 * 2 * 3 으로 나타낼 수 있습니다. 따라서 12의 소인수는 2와 3입니다. 자연수 n이 매개변수로 주어질 때 n의 소인수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.
🚨 제한 사항
- 2 ≤ n ≤ 10,000
💻 입출력 예
n | result |
12 | [2, 3] |
17 | [17] |
420 | [2, 3, 5, 7] |
✨ 풀이 설명
소인수를 구하는 공식을 이용하였다(참고).
이대로 구현을 해보았다.
우선 n이 1이 아닐 때, while문으로 반복해 주었다.
그다음, n이 i로 나누어 떨어지지 않으면 i에 1을 더해주었고, 나누어 떨어지면 answer에 i를 추가해 준 후, n을 i로 나눈 수로 재할당해 주었다.
이렇게 해주면 되는데, answer을 set으로 해준 이유는, 소인수 분해 한 수를 모두 넣는 것이 아닌, 나올 수 있는 소인수를 반환하는 거라, 중복이 있으면 안 되기 때문이다.
set으로 저장해 준 후, 마지막에 list로 변환해 주어 반환하면 된다.
🕵️♂️ 코드
'codingtest' 카테고리의 다른 글
[programmers] 공원 산책 (0) | 2023.03.30 |
---|---|
[programmers] 구슬을 나누는 경우의 수, 중복된 숫자 개수, 배열의 평균값, 진료 순서 정하기, 팩토리얼 (0) | 2023.03.26 |
[programmers] 겹치는 선분의 길이, 캐릭터의 좌표, 문자열 정렬하기 (1), 평행, 나머지 구하기 (0) | 2023.03.24 |
[programmers] 다항식 더하기, 합성수 찾기, 머쓱이보다 키 큰 사람, 분수의 덧셈, 두 수의 나눗셈 (0) | 2023.03.23 |
[programmers] 옹알이 (1), 짝수는 싫어요, 배열 두배 만들기, 중앙값 구하기, 최빈값 구하기 (0) | 2023.03.22 |