[CodeWars] Give me a Diamond [JS / 6kyu] 다이아 찍기

2023. 2. 16. 16:54·알고리즘(Algorithm)
728x90
반응형

다이아 찍기

최대한 for문을 하나만 쓰려고 고민했다

function diamond(n){
  if(n===1) return '*\n'
  if(n<3||n%2===0) return null
  let ans=''
  let temp=''
  let half=Math.floor(n/2)+1
  for (let i = 1; i <= n; i++) {
    temp = i <= half ? i : n-i+1
    ans+=' '.repeat(half-temp)+'*'.repeat(2*temp-1)+'\n'
  }
  return ans;
}

우선 n이 짝수거나 3보다 작은 경우 다이아몬드를 만들수 없으므로 예외처리를 해주고 시작한다 (1은 제외)

다이아를 찍으려면 아래와 같이 공백을 넣어주는 부분이 필요하고 앞쪽 네모에만 공백을 넣어주면 되기에 뒤쪽

공백은 생각할 필요가 없다

□□*□□
□***□
*****
□***□
□□*□□

n=5일경우 첫줄에 필요한 공백은 2개고 별은 1개다

half는 3이 되고, for문을 들어가보면 i<=half일 경우 temp가 i가 되거나, 조건을 만족하지 않으면 n-i+1이 되는 코드가 있다.

i=1일경우 half보다 작으므로 temp에는 1이 들어가고

ans부분에 ' '.repeat 에는 공백이 3-1 = 2 가 들어가게 되고, ' * ' 부분에는 2*1-1이므로 1 즉 별 한개가 찍히고 다음라인으로 넘어간다

i=3일 경우 조건에 일치 temp=3, 공백은 0, 별은 6-1해서 5개 찍히고

i=4일 경우 n-i+1 -> 5-4+1 = 2 ... 

 let half=Math.floor(n/2)+1
  for (let i = 1; i <= n; i++) {
    temp = i <= half ? i : n-i+1
    ans+=' '.repeat(half-temp)+'*'.repeat(2*temp-1)+'\n'
  }

시간복잡도나 공간복잡도는 나중에 측정해서 올려야겠다

 

728x90
반응형
저작자표시 (새창열림)

'알고리즘(Algorithm)' 카테고리의 다른 글

[LeetCode] 1011.Capacity To Ship Packages Within D Days [JS]  (1) 2024.10.24
[LeetCode/CodeWars] - Two Sum [JS]  (0) 2023.02.21
프로그래머스 - 영어 끝말잇기[JS]  (0) 2023.02.12
프로그래머스 - 숫자의 표현 [JS]  (0) 2023.01.30
프로그래머스 - 명예의 전당  (1) 2023.01.24
'알고리즘(Algorithm)' 카테고리의 다른 글
  • [LeetCode] 1011.Capacity To Ship Packages Within D Days [JS]
  • [LeetCode/CodeWars] - Two Sum [JS]
  • 프로그래머스 - 영어 끝말잇기[JS]
  • 프로그래머스 - 숫자의 표현 [JS]
Hun-bot
Hun-bot
IT를 중심으로 다양한 것
  • Hun-bot
    로봇이 만드는 눈사람
    Hun-bot
  • 전체
    오늘
    어제
    • All Article (132)
      • Programmers (6)
        • TIP (1)
        • SQL (2)
        • LV1 (1)
        • LV2 (2)
        • LV3 (0)
      • Baekjoon (31)
        • Bronze (10)
        • Silver (19)
        • Gold (2)
        • Platinum (0)
        • Diamond (0)
      • Leetcode (0)
        • Easy (0)
        • Medium (0)
        • Hard (0)
        • SQL (0)
      • 알고리즘(Algorithm) (44)
      • JavaScript (40)
      • Linux (7)
      • JSP (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      JS #정규표현식
      SQL
      알고리즘
      JS #JavaScript #프로그래머스 #카카오
      코딩테스트
      자바스크립트
      리눅스
      코드트리
      Python #알고리즘
      codetree
      Vue #Vue.js #정리
      Javascript
      Algorithm
      자바스크립트 #연습문제
      JS #프로그래머스 #숫자의표현 #알고리즘
      알고리즘 #Algorithm
      JS #클래스
      프로그래머스 #자바스크립트 #JS
      JSP #Vscode #톰켓 #Tomcat #Java #Web #jdk
      async await #js #문법 #자바스크립트 #비동기
      오블완
      JS #JavaScript #프로그래머스 #알고리즘
      c++
      Programmers
      코드트리후기
      티스토리챌린지
      BaekJoon
      갭체크
      LeetCode #JS #Javascript #Algorithm
      프로그래머스
    • 최근 댓글

    • hELLO· Designed By정상우.v4.10.3
    Hun-bot
    [CodeWars] Give me a Diamond [JS / 6kyu] 다이아 찍기
    상단으로

    티스토리툴바

    티스토리툴바