알고리즘

백준

  • 별 찍기 - 1

    • 어렴풋이 이렇게 하면 되겠지 같은 생각으로 풀어도 풀리지만, 깨달음을 얻고 다시 풀어보니까 확실히 다르게 느껴졌다. 과정 하나하나에 왜 이렇게 해야되는지 명확한 이유를 생각하면서 코드를 짜야 된다는 것을 다시 한 번 느꼈다.
  • 별 찍기 - 2

    • 아무리 알고리즘 문제라고 하지만, 최대한 가독성 있게 작성하는 방식으로 문제를 앞으로 계속 풀고자 한다.

      // 이전에 작성했던 코드
      package main
      
      import (
        "bufio"
        "fmt"
        "os"
      )
      
      func main() {
        n := 0
        fmt.Scanf("%d", &n)
      
        bw := bufio.NewWriter(os.Stdout)
        // 아래 반복문을 보면, 일단 생각을 하게된다.
        for i := 1; i <= n; i++ {
            for j := n; j > 0; j--  {
                if j > i {
                    bw.WriteRune(' ')
                } else {
                    bw.WriteRune('*')
                }
            }
            bw.WriteRune('\n')
        }
      
        bw.Flush()
      }
      // 새로 작성한 코드
      package main
      
      import (
        "bufio"
        "fmt"
        "os"
      )
      
      func main() {
        var n int
        fmt.Scanf("%d", &n)
      
        wr := bufio.NewWriter(os.Stdout)
        // 가독성이 훨씬 좋다. 논리도 너무 명확함
        for line := 1; line <= n; line++ {
            star := line
            blank := n-star
      
            for blank > 0 {
                wr.WriteByte(' ')
                blank--
            }
      
            for star > 0 {
                wr.WriteByte('*')
                star--
            }
      
            wr.WriteByte('\n')
        }
      
        wr.Flush()
      }

  • 22가지 수학의 원칙으로 배우는 생각공작소라는 책을 샀다.

    전구를 교체하는데 필요한 인원은 몇 명일까?

    • 초현실주의자의 경우, 4명이 필요하다. 전구를 갈아 끼울 사람 1명, 모래를 가득 채워서 욕조를 모래 수렁으로 만들 사람 1명, 욕실 모서리를 사각형 쟁반들로 장식할 사람 1명, 번쩍번쩍 광이 나는 손목시계로 지친 유니콘을 달래줄 사람 1명
    • 정원사의 경우, 3명이 필요하다. 전구를 교체할 사람 1명, 해당 계절에 어떤 종류의 전구를 사용하는 것이 옳을지 논쟁을 벌일 사람 2명
    • 명상수련자의 경우, 2명이 필요하다. 전구를 교체할 사람 1명, 전구를 교체하지 않는 사람 1명
    • 수학자의 경우, 1명이 필요하다. 그 1명은 초현실주의자나 정원사 혹은 명상수련자에게 전구를 건넨 뒤 문제가 해결된 것으로 선언한다. (p.73)

TypeScript