인프런 커뮤니티 질문&답변

하리님의 프로필 이미지
하리

작성한 질문수

[리뉴얼] 코딩자율학습 제로초의 자바스크립트 입문

별찍기 숙제

별찍기 마름모 문제입니다.

작성

·

156

0

안녕하세요! 마름모 별찍기 문제입니다 !

우선 위에 마름모는 출력을 하였는데 밑으로 다시 내려오는 마름모가 안되어서 질문 드립니다.

for(let j =0; j<6 ;j++){

if(j % 2 ===0) continue

for(let i =0; i<3; i++){

for(i+ j+i ===5)

console.log(' '.repeat(i)+ '*'.repeat(j)+' '.repeat(3-i));

}

}

  • 이 for문 에서 종료식을 바꿔야될것 같은데 지금은 종료식이 1씩 더해지는 것인데 혹시 종료식이 1씩 빼지는 것도 동시에 할수 있는 것 이 있을까요?

  • 아니면 그림에 나온것 처럼 따로 k를 만들어서 해야되는 걸까요?

  • 아니면 콘솔로 나온 결과는 반대로 해서 한번더 다시 나올수 있도록 해야되나? 라는 생각도 해보았습니다.

답변 2

1

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

힌트를 드리자면

Math.abs 함수를 쓰시면 for문 한 방에 가능합니다(절댓값을 출력하는 함수입니다)

Math.abs(-1) === 1

Math.abs(1) === 1

하리님의 프로필 이미지
하리
질문자

힌트를 주신 이유가 숫자 범위를 - 까지 쓰라는 게 아닐까 해서 다시 해보았습니다.

마름모로 출력이 나오는데 2번이 나옵니다 왜 그러는지를 모르겠어서 다시 질문 합니다!

분명히 if문으로 합이 5가 되게 조건을 걸었는데

왜 for 문이 2번 반복을 하는걸까요?

 

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

일단 마이너스 범위를 하시는 건 맞습니다. 그런데 for문을 두 번 쓸 필요가 없습니다. 한 번이면 됩니다.

절댓값과의 규칙을 찾아보세요.

별 절댓값 공백

1 -2 2

3 -1 1

5 0 0

3 1 1

1 2 2

0

못 풀어서 찾아보다가 질문해주신 덕분에 힌트를 얻었네요.

절대값을 이용할 생각은 하지도 못 했어요.

저는 이렇게 해결했어요.

for(let i =0; i<5; i++){
    console.log(' '.repeat( Math.abs(2 - i)) + '*'.repeat(5 - Math.abs(4 - i * 2)) )
}
하리님의 프로필 이미지
하리

작성한 질문수

질문하기