이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다.
별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요.
제한 조건
내가 해결한 결과!
가로가 n , 세로가 m ⇒ n * m 이라는 의미.
별을 찍어야하기 때문에 별모양을 String으로 미리 만들어줌.
별 * n = 가로 / (별 * n)을 m만큼 반복하면 완성!
String은 숫자랑 사칙연산이 안되기 때문에 , String method repeat()을 이용!
⇒ .repeat() method는 괄호안에 들어갈 변수 또는 숫자만큼 ,
사용하려는 String변수를 반복하는 method이다!
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();
String star = "*";
String star_num = star.repeat(a);
for (int i = 0; i < b; i++ ){
System.out.println(star_num);
}
}
}
프로그래머스에는 다른 사람들이 푼 알고리즘 코드들도 볼 수 있다.
나는 코딩테스트가 처음이라 간결하거나 깔끔하거나 스킬이 뛰어나지도 않지만 다른 분들이 푼 코드를 보면서 더 공부할 수 있고 참고할 수 있어서 좋은 것 같다.
다른 사람들이 푼 코드
이중 for문을 이용함!
b가 세로이므로, a보다 더 큰 틀임. → b번 반복하는 것을 바깥 for문으로 작성.
b번 반복하는 동안~ 별을 a만큼 찍어줘라.
import java.util.Scanner;
public 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();
}
}
}
대체로는 내가 한 것과 큰 차이는 없었다.
좀 더 찾아보다가 많이 보이는 코드와 좀 다른걸 보았다.
import java.util.Scanner;
import java.util.stream.IntStream;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
StringBuilder sb = new StringBuilder();
IntStream.range(0, a).forEach(s -> sb.append("*"));
IntStream.range(0, b).forEach(s -> System.out.println(sb.toString()));
}
}
이 코드 때문에 IntStream에 대해 찾아보고 조금이나마 알게 되었다.
그리고 TIL에 간단히 정리도 할 수 있었다.
나는 몰랐던 패키지, 클래스여서 이 코드가 더 멋있어보이고 좋아보이지만 사실 나는 어떤 코드가 좋은 코드인지 아직 모른다.
그래도 모르는건 알아가는게 좋으니까 찾아보고 메모해본다.
그냥 내 방식, 내 생각대로 문제를 그저 맞추기보단 조금 더 의지를 가지고,
다른 사람들이 한 것도 찾아 보면서 나와 다른 건 어떤게 있는지, 더 간결하면서 직관적이고 좋아 보이는 코드는 없는지, 내가 모르는 메서드나 클래스가 있진 않은지 찾아보면서 공부하는것이 더 많은 도움이 되지않을까싶다.
그래서 나는 한문제 한문제 풀어나갈때마다, 그저 문제를 맞추는것으로 끝나지 않도록 꾸준히 노력해보려고 한다.