-
프로그래머스 - 직사각형 별 찍기알고리즘 2022. 1. 18.반응형
보통 별 찍기는 이중 for문으로 해결을 많이한다.
나도 이중 for문으로 첨에 작성을 했었는데
다른 정답들을 보니까 신기한게 많아서 분석 해본다.
자바 코드 (이중 for문)
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(); } } }
파이썬 코드 (이중 for문)
a, b = map(int, input().strip().split(' ')) for i in range(b): for j in range(a): print("*", end='') print()
파이썬의 print 옵션인 end를 활용하면 자바의 println()이 print()로 바뀌는거랑 동일 함.
여기까진 누구나 생각할 수 있는 이중 for문의 방법
파이썬 다른 방법
answer = ('*' * a + '\n') * b print(answer)
\n을 활용하면 한줄만에 끝낼 수 있음.
자바 다른 방법
import java.util.Scanner; import java.util.stream.IntStream; public class test01 { public static void main(String[] args) { // TODO Auto-generated method stub 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에 람다식을 활용함.
Stream은 한번만 사용이 가능함 그래서 StringBuilder로 0부터 a의 길이 만큼 *을 담아둠
(forEach는 반복한다는 뜻 sb에는 *이 a의 길이만큼 담김)
다시 Stream 생성 이번엔 0에서부터 b의 길이만큼 반복한다, 반복하는데 매개변수 s에 sb에 담긴 값들을 문자열로 바꾸고 println으로 출력하는 메소드를 람다로 표현 이걸 0~b의 길이만큼 반복함
즉 0~a 만큼의 *을 sb에 저장하고
0~b만큼의 길이만큼 sb에 저장된 *을 출력 하겠다.
반응형'알고리즘' 카테고리의 다른 글
프로그래머스 - 평균 구하기 (0) 2022.01.26 프로그래머스 - 하샤드 수 (0) 2022.01.25 프로그래머스 - 핸드폰 번호 가리기 (0) 2022.01.25 프로그래머스 - 행렬의 덧셈 (0) 2022.01.21 프로그래머스 - x만큼 간격이 있는 n개의 숫자 (0) 2022.01.19