목차
▸ Lv.1
1. 직사각형 별찍기
2. 최대공약수와 최대공배수
3. 3진법 뒤집기
4. 이상한 문자 만들기
▸ Lv.0
5. 겹치는 선분의 길이
▼ 문제
이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다.
별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요.
▼ 제한 조건
▼ 예시
입력
5 3
출력
*****
*****
*****
▼ 내 풀이
import java.util.Scanner;
class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
for(int i = 0; i<b; i++){
for(int j = 0; j<a; j++){
System.out.print("*");
}
System.out.println();
}
}
}
▼ 문제
두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.
▼ 제한 사항
▼ 입출력 예
n | m | return |
---|---|---|
3 | 12 | [3, 12] |
2 | 5 | [1, 10] |
▼ 내 풀이
class Solution {
public int[] solution(int n, int m) {
int[] answer = new int[2];
int maxnum = n;
int gcd = 0;
if(n<m){
maxnum = m;
}
for(int i = 1; i<=maxnum; i++){
if(n%i==0 && m%i==0){
gcd = i;
}
}
int lcm = (n*m)/gcd;
answer[0] = gcd;
answer[1] = lcm;
return answer;
}
}
▼ 문제
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
▼ 제한사항
▼ 입출력 예
n | result |
---|---|
45 | 7 |
125 | 229 |
▼ 내 풀이
import java.util.List;
import java.util.ArrayList;
class Solution {
public int solution(int n) {
int answer = 0;
List<Integer> remainder = new ArrayList<>();
while(true){
int share = n/3;
remainder.add(n%3);
n = share;
if(share==0){
break;
}
}
int[] reverse = new int[remainder.size()];
for(int i = 0; i<reverse.length; i++){
reverse[i] = remainder.get(reverse.length-i-1);
}
for(int i = 0; i<reverse.length; i++){
answer += reverse[i]*Math.pow(3,i);
}
return answer;
}
}
▼ 문제
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
▼ 제한 사항
▼ 입출력 예
s | return |
---|---|
"try hello world" | "TrY HeLlO WoRlD" |
▼ 내 풀이
[오답코드]
class Solution {
public String solution(String s) {
String answer = "";
String[] array = s.split(" ");
for(int i = 0; i<array.length; i++){
String sko = array[i];
char[] chararray = sko.toCharArray();
for(int j = 0; j<chararray.length; j++){
if(j%2==0){
if(Character.isLowerCase(chararray[j])){
chararray[j] = Character.toUpperCase(chararray[j]);
}
} else{
if(Character.isUpperCase(chararray[j])){
chararray[j] = Character.toLowerCase(chararray[j]);
}
}
}
array[i] = String.valueOf(chararray);
answer = String.join(" ",array);
}
return answer;
}
}
[수정코드]
class Solution {
public String solution(String s) {
String answer = "";
String[] array = s.split(" ", -1);
for(int i = 0; i<array.length; i++){
String sko = array[i];
char[] chararray = sko.toCharArray();
for(int j = 0; j<chararray.length; j++){
if(j % 2 == 0){
if(Character.isLowerCase(chararray[j])){
chararray[j] = Character.toUpperCase(chararray[j]);
}
} else if(j % 2 == 1){
if(Character.isUpperCase(chararray[j])){
chararray[j] = Character.toLowerCase(chararray[j]);
}
}
}
array[i] = String.valueOf(chararray);
}
answer = String.join(" ",array);
return answer;
}
}
▼ 문제
선분 3개가 평행하게 놓여 있습니다. 세 선분의 시작과 끝 좌표가 [[start, end], [start, end], [start, end]] 형태로 들어있는 2차원 배열 lines가 매개변수로 주어질 때, 두 개 이상의 선분이 겹치는 부분의 길이를 return 하도록 solution 함수를 완성해보세요.
lines가 [[0, 2], [-3, -1], [-2, 1]]일 때 그림으로 나타내면 다음과 같습니다.
선분이 두 개 이상 겹친 곳은 [-2, -1], [0, 1]로 길이 2만큼 겹쳐있습니다.
▼ 제한 사항
▼ 입출력 예
lines | result |
---|---|
[[0, 1], [2, 5], [3, 9]] | 2 |
[[-1, 1], [1, 3], [3, 9]] | 0 |
[[0, 5], [3, 9], [1, 10]] | 8 |
▼ 내 풀이
[오답코드]
class Solution {
public int solution(int[][] lines) {
int answer = 0;
int min = lines[0][0];
int max = lines[0][0];
for(int i = 0; i < lines.length; i++){
for(int j = 0; j < lines[0].length; j++){
if(min > lines[i][j]){
min = lines[i][j];
}
if(max < lines[i][j]){
max = lines[i][j];
}
}
}
int length = max - min;
int[] line = new int[length];
if(min<0){
int d = 0 - min;
for(int i = 0; i<lines.length; i++){
for(int j = 0; j<lines[0].length; j++){
lines[i][j] = lines[i][j]+d;
}
}
}✔️
for(int i =0; i<lines.length; i++){
for(int j = lines[i][0]; j<lines[j][1]📍; j++){
line[j] += 1;
}
}
for(int i : line){
if(i>1){
answer += 1;
}
}
return answer;
}
}
[수정코드]
class Solution {
public int solution(int[][] lines) {
int answer = 0;
int min = lines[0][0];
int max = lines[0][0];
for(int i = 0; i < lines.length; i++){
for(int j = 0; j < lines[0].length; j++){
if(min > lines[i][j]){
min = lines[i][j];
}
if(max < lines[i][j]){
max = lines[i][j];
}
}
}
int length = max - min;
int d = 0 - min;
int[] line = new int[length];
for(int i =0; i<lines.length; i++){
for(int j = lines[i][0]+d; j<lines[i][1]+d; j++){
line[j] += 1;
}
}
for(int i : line){
if(i>1){
answer += 1;
}
}
return answer;
}
}