프로그래머스 코딩테스트 1.

송은혜·2022년 3월 11일
0

코딩테스트

목록 보기
1/5

이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다.

별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요.

제한 조건

  • n과 m은 각각 1000 이하인 자연수입니다.

내가 해결한 결과!

가로가 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에 간단히 정리도 할 수 있었다.
나는 몰랐던 패키지, 클래스여서 이 코드가 더 멋있어보이고 좋아보이지만 사실 나는 어떤 코드가 좋은 코드인지 아직 모른다.
그래도 모르는건 알아가는게 좋으니까 찾아보고 메모해본다.



그냥 내 방식, 내 생각대로 문제를 그저 맞추기보단 조금 더 의지를 가지고,
다른 사람들이 한 것도 찾아 보면서 나와 다른 건 어떤게 있는지, 더 간결하면서 직관적이고 좋아 보이는 코드는 없는지, 내가 모르는 메서드나 클래스가 있진 않은지 찾아보면서 공부하는것이 더 많은 도움이 되지않을까싶다.

그래서 나는 한문제 한문제 풀어나갈때마다, 그저 문제를 맞추는것으로 끝나지 않도록 꾸준히 노력해보려고 한다.

0개의 댓글

관련 채용 정보