아요 개발 일기
[프로그래머스] Level 1. 직사각형 별찍기 본문
안녕하세요~~
오랜만이죠! 최근에 며칠 아파서 문제를... 못 풀어가지고.. ㅜㅜ
문제
내가 푼 풀이
별찍기는 학부생 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는 시간은 적은데 메모리 사용량은 쪼금 크네요?? 제 풀이는 어중간한 것 같구 좋다고 생각한 풀이2가 제일 나은 것 같네요@.@
'Algorithms > 문제 풀이' 카테고리의 다른 글
[프로그래머스] Level 1. 최대공약수와 최소공배수 (0) | 2023.01.17 |
---|---|
[프로그래머스] Level 1. 자릿수 더하기 (0) | 2023.01.16 |
[프로그래머스] Level 1. 서울에서 김서방 찾기 (2) | 2023.01.16 |
[프로그래머스] Level 1. 정수 내림차순으로 배치하기 (1) | 2023.01.16 |
[프로그래머스] Level 1. 자연수 뒤집어 배열로 만들기 (1) | 2023.01.16 |