아요 개발 일기

[프로그래머스] Level 1. 직사각형 별찍기 본문

Algorithms/문제 풀이

[프로그래머스] Level 1. 직사각형 별찍기

소진이 2023. 1. 16. 10:41

안녕하세요~~

오랜만이죠! 최근에 며칠 아파서 문제를... 못 풀어가지고.. ㅜㅜ


문제

 

내가 푼 풀이

별찍기는 학부생 1학년때 처음 프로그래밍 언어 배우면서 했던건데.. 아주 추억이었어요...!

저는 for문을 중복으로 사용하여 작성했습니다!

예시처럼 5 3이 입력이되면 1줄당 5개씩 3줄!! 

b가 1일때 a는 5번 *이 찍혀야겠죠??? 

내부에있는 for문에서 *을 a만큼 찍고, 외부 for문에서 b줄 만큼 줄을 만들어주면 됩니다!

아주 간단하죠?ㅎㅎ


좋다고 생각한 풀이

아주 간결한 풀이들.. 세상에는 똑똑이들이 정말 많아여

for _ in 0..<b {
    print(Array(repeating: "*", count: a).joined())
}

오잉 joined()?? 처음보는 친구에용,,, 단어만 보면 연결하다? 합쳐지다? 이런느낌인데 맞을까요?

 

 공식 문서를 데리고 왔어요!

해석
이 메소드는 배열의 문자열들을 하나로 연결한 문자열을 반환하며, 각 요소 사이에 분리 기호를 삽입할 수도 있습니다.

라네요?!

간단히 정리해보자면... 합쳐주는 친구인 것 같아요!!

그러니까 이 코드는

for-in문을 사용하여 0부터 b번째 줄마다 Array타입에 "*"을 a개 합쳐서(joined()) 출력해주는 코드 네요! 

간단하고 좋은 코드 같아요! 

 


print(String(repeating: String(repeating: "*", count: n[0])+"\n", count: n[1]))

오.. 위에는 Array 타입을 사용했는데 여기는 String 타입을 사용해서 출력을 했어요.

좀 더 이해하기 쉽게 안쪽 부분만 짤라서 보겠습니다!

 

String(repeating: "*", count: n[0])

이 부분은 위에서 설명한 부분과 유사해서 잘 이해가 가죠?? *을 n[0] 번씩 찍어주겠다는 겁니다!

n[0]은 a와 같다고 생각하면 됩니다! 위에서 *을 5번 찍는 부분인 것 같아요!

 

이제 다음 부분을 봅시다!

조금 길어서 위에 설명한 코드 부분은 ###으로 생략해 놨어요!!

print(String(repeating: ### +"\n", count: n[1]))

짧아지니까 보기 더 쉽네용!

\n은 다음 단락으로 즉, 다음 행으로 넘어가주는 명령어?에요!!

아~ *을 n[0](a)번 찍고 다음 단락(\n)으로 넘겨달라는 말이겠네요!! 

count : n[1]번은 당연히 b줄만큼! 이겠죠?

배운걸 아주아주 잘 활용한 코드네요 :D

 


정확성 비교

 

제가 푼 풀이

 

좋다고 생각한 풀이1

 

좋다고 생각한 풀이2

오! 뭔가 좋다고 생각한 풀이1 은 시간이 오래걸리는데 메모리 사용량은 적고.. 좋다고 생각한 풀이2는 시간은 적은데 메모리 사용량은 쪼금 크네요?? 제 풀이는 어중간한 것 같구 좋다고 생각한 풀이2가 제일 나은 것 같네요@.@