[Python] 코딩 도장 - 다음 디브온 코드골프 문제

Updated:

코딩 도장 사이트의 문제를 직접 풀어본 내용을 정리하여 올립니다.

코딩 도장에서 여러 문제를 확인할 수 있습니다.

난이도 순으로 차근차근 풀어보려 합니다.


[문제: 다음 디브온 코드골프 문제] - Lv.2

디브온에서 미니대안언어축제가 진행되던 M2 밖에 텍스트큐브 부스에서 재미있는 코드골프 문제 풀기가 있었습니다.

150자 이하로 푸신 분들에게는 즉석에서 제공되는 원두커피와 텀블러가 상으로 주어졌다고 합니다.

문제는 아래와 같습니다. 이 결과가 나와야 하는데 언어 제약은 없답니다.

     *
     *
    * *
   *   *
  *     *
**       **
  *     *
   *   *
    * *
     *
     *

출처: https://codingdojang.com/scode/433?answer_mode=hide


[풀이]

for i in range(11):
    
    lst = [" "] * 11
    n = abs(5-i)
    lst[10-n] = "*"
    lst[n] = "*"
        
    print("".join(lst))
     *     
    * *    
   *   *   
  *     *  
 *       * 
*         *
 *       * 
  *     *  
   *   *   
    * *    
     *     

패턴을 찾아서 출력하고 싶은데 느낌은 오는데.. 구현을 못하겠다

아쉬운대로 마름모라도 출력해보았다…


[추천 풀이]

r = range(-5,6)
for y in r:
    l=""
    for x in r:
        a,b=abs(x),abs(y)
        l+=(" ","*")[a+b==4or(5,0)in[(a,b),(b,a)]]
    print(l)
     *     
     *     
    * *    
   *   *   
  *     *  
**       **
  *     *  
   *   *   
    * *    
     *     
     *     

코드부터 살펴보면 (결과1, 결과2)[조건식]으로 입력하면 조건식이 참이면 결과2, 아니면 결과1이 나온다고 한다.

r = range(-5,6)
for y in r:
    l=""
    for x in r:
        a,b=abs(x),abs(y)
        l+=(" ","*")[a+b==4]
    print(l)
     *     
    * *    
   *   *   
  *     *  
 *       * 
  *     *  
   *   *   
    * *    
     *     

처음 풀이에서 뒤의 조건을 제거했을 때 모습이다.

a + b가 4인 경우만 별표를 추가하므로 작은 마름모가 나온 형태이다.

여기에 조건을 추가해서 마름모의 각 모서리 끝에 별표를 추가한 것이다.

r = range(-5,6)
for y in r:
    l=""
    for x in r:
        a,b=abs(x),abs(y)
        l+=(" ","*")[a+b==5]
    print(l)
     *     
    * *    
   *   *   
  *     *  
 *       * 
*         *
 *       * 
  *     *  
   *   *   
    * *    
     *     

a + b를 5로 바꾸면 내가 만든 마름모와 같은 형태가 나타난다.

Leave a comment