반응형

우재남씨가 지은 "파이썬 for Beginner"에 나오는 [프로그램 1] 다이어몬드 출력 문제를 풀어본다.

문제를 분석해 본다. "  "(스페이스)를 출력하는 부분과 "*"(다이어몬드)를 출력하는 부분으로 나누어서 다음과 같이 i가 0에서 부터 8까지 변경될 경우 그에 따른 변화를 테이블로 작성해 보았다.

i 스페이스 from 스페이스 to 다이어몬드 from 다이어몬든 to 비고
0 0 0 3 4-i-1 4 4-i 4 4+i  
1 0 0 2 4-i-1 3 4-i 5 4+i  
2 0 0 1 4-i-1 2 4-i 6 4+i  
3 0 0 0 4-i-1 1 4-i 7 4+i  
4 -1 4-i-1 -1 4-i-1 0 4-i 8 4+i  
5 0 0 0 i-4-1 1 -(4-i) 7 12-i  
6 0 0 1 i-4-1 2 -(4-i) 6 12-i  
7 0 0 2 i-4-1 3 -(4-i) 5 12-i  
8 0 0 3 i-4-1 4 -(4-i) 4 12-i  

다이어몬드를 출력하는 특성상 출력하는 부분이 i가 0~4까지는 4-i부터 4+i까지 출력이 되어야 하고, i가 5~8까지는 -(4-i)부터 12-i까지 출력이 되어야 한다.

이를 스프레드 시트를 사용하여 표현하면 다음과 같이 나타낼 수 있다.

위의 그래프는 별을 출력하는 시작과 끝을 나타내는 것이다. 첫번째(i = 0)부터 다섯번째(i = 4)까지는 시작은 -i + 4로 나타낼 수 있고, 끝은 i + 4로 나타낼 수 있다. 또 다섯번째(i = 4)부터 아홉번째(i = 8)까지는 시작은 i - 4이고 끝은 -i + 12이다.

이는 절대값을 사용하면 최소값은 | i - 4 |, 최대값은 - | i - 4 | + 8로 나타낼 수 있다. 이를 그래프를 나타내는 절대값과  이동, 대칭으로 나타내면 다음 그림과 같다.

y = | x |를 나타내는 그래프를 오른쪽으로 4만큼 이동시키면 시작을 나타내는 수식(함수 y = | x - 4 |)이 되고, 이를 x축으로 대칭을 시켜서 y = - | x - 4 |로 변경하고 또 y축으로 8만큼 이동시키면 끝을 나타내는 수식(함수 y = - | x - 4 | + 8이 된다.

따라서 다이어몬드를 출력하는 프로그램은 다음과 같이 프로그램할 수 있다.

먼저 0~8까지 줄을 나타내는 반복문을 사용하고 다시 스페이스를 출력하는 부분과 다이어먼드를 출력하는 부분으로 나눌 수 있으며, 다이어몬드를 출력하는 시작과 끝을 위의 수식을 사용하여 나타내면 된다.

for i in range(0, 9, 1):
    k = abs(i - 4)
    l = - abs(i - 4) + 8
    for j in range(0, l + 1, 1):
        if j >= k and j <= l:
            print('\u2605', end='')
        else:
            print("  ", end='')
    print("")

이를 실행하면 다음과 같이 다이어몬드를 출력하는 것을 알 수 있다.

하나의 문제를 푸는 것이 이렇게 복잡하고, 이를 설명하는 것이 또한 복잡하다. 또 이렇게 설명을 한다고 했을 때 이해를 잘 할 수 있는지도 궁금하다. 조금더 이해가 될 수 있도록 작성을 해 보았다.

반응형

'Python' 카테고리의 다른 글

python에서 MySQL 연동하여 테이블 검색  (0) 2023.01.17
python mysql 연동  (0) 2023.01.17
Posted by 세상을 살아가는 사람
,
반응형

기존에 스프링으로 추가한 것을 스프링 부트로 구현한 것에 검색 세부조건(신상품, Best, 할인)과 정렬조건을 추가로 하였다.

관리자 화면에서 스타일 숍 상품에 대한 검색과 함께 일반 사용자 화면에서 검색 기능을 합하여 구현을 하였다.

github에 소스코드를 다시 push를 하였다.

https://github.com/KYUNGSUB/springboot-lala-market.git

 

GitHub - KYUNGSUB/springboot-lala-market

Contribute to KYUNGSUB/springboot-lala-market development by creating an account on GitHub.

github.com

세부 기능은

- 주 검색 기능

- 세부 검색 기능

- 신상품, Best, 할인 등에 따른 검색

- 정렬조건으로 최신순, 낮은 가격순, 높은 가격순이 있다.

동작 확인은 http://43.200.20.11/product/list이다

물론 관리자로 로그인을 하여야 한다. (user9/!pw09)

로그인하면 관리자 페이지 http://hostname/aindex로 이동 한 후 메뉴 상품 관리->상품 리스트를 선택하면 된다.

반응형
Posted by 세상을 살아가는 사람
,
반응형

지난 번에 스프링을 이용해서 이정원씨가 지은 "Do it 웹사이트 기획 입문"의 기획서인 라라마켓 쇼핑몰을 일부 구현을 하였고, 블로그에 기술하였다. (https://blog.naver.com/ksseo63/222750784956 ~ https://blog.naver.com/ksseo63/222770023453)

여기서는 스프링 부트를 이용하여 구현해 본다. 같은 기능을 스프링 부트를 이용해서 빨리 구현을 하다보니 기능을 자세히 검증하지 못하고 주 기능만 구현하였다.

구현한 것을 자세히 기술할 필요가 있지만, 남은 기능을 계속 구현할 필요성도 있어서 고민이다. 그래서 우선 여기서 현재까지 구현한 것을 간단하게 기술하고, 앞으로 남은 기능을 계속 추가해 보고자 한다.

우선 개발환경은 다음과 같다.

- Windows 10 Home 또는 Pro OS

- JDK-11.0.16

- STS4 IDE

- MySQL (AWS RDS상에서 동작

구현해야 할 기능에 대한 설계서는 이정원씨가 지은 "Do it 웹 사이트 기획입문"에서 나온 화면정의서(라라마켓_관리자_화면정의서, 라라마켓_이용자_화면저의서)와 여러 기획자료를 참고하였다.

구현한 기능은 다음 순서에 따라 구현하였다. 이것은 스프링으로 개발했던 것을 기반으로 하다보니 같은 순서를 따랐다.

- 라라마켓 레이아웃 추가

- Security 적용

- 관리자 페이지

- 상품 카테고리 관리

- 상품관리 -> 상품등록

- 상품관리 -> 상품 리스트

- 정책관리 -> 정책

- 정책관리 -> 약관관리

- 관리자기능 -> 배너관리

- 회원가입

소스 코드는 github에 등록을 하였다. (https://github.com/KYUNGSUB/springboot-lala-market)

구현된 것을 아마존 클라우드 AWS EC2를 사용하여 동작 시켜 본다.

EC2는 Linux Ubuntu OS를 사용하기 때문에 Windows 환경과는 약간 차이가 있다. 따라서 다음과 같이 수정해 주어야 한다.

github 원격 레포지토리에 있는 소스 코드를 $ git clone https://github.com/KYUNGSUB/springboot-lala-market.git명령어를 입력하여 clone 한다.

$ cd springboot-lala-market을 사용하여 폴더 내로 이동한다.

src/main/resources/application.properties 파일의 설정 정보를 다음과 같이 수정한다.

# server.port=80    # Linux에서 80 포트를 사용하려면 sudo(슈퍼유저) 권한으로 앱을 실행하여야 한다. 따라서 8080 포트를 사용하도록 주석으로 처리해 준다.

spring.servlet.multipart.location=/home/ubuntu/upload

kr.talanton.upload.path=/home/ubuntu/upload

# port
# server.port=80

# 생략된 부분이 있음...
spring.servlet.multipart.enabled=true
#spring.servlet.multipart.location=D:\\zzz\\upload
spring.servlet.multipart.location=/home/ununtu/upload
spring.servlet.multipart.max-request-size=30MB
spring.servlet.multipart.max-file-size=10MB

#kr.talanton.upload.path=D:\\zzz\\upload
kr.talanton.upload.path=/home/ubuntu/upload

# 생략된 부분이 있음...

파일 업로드 시 임시로 생성되는 파일과 파일을 저장할 폴더로 /home/ubuntu/upload를 지정하고 폴더를 생성해 준다.

gradlew 파일에 실행 권한을 부여한다.

$ chmod +x ./gradlew

앱의 실행파일을 생성한다.

$ ./gradlew bootJar./

성공적으로 build가 되고 build/libs 폴더 밑에 springboot-lala-market-0.0.1-SNAPSHOT.jar가 생성됨을 알 수 있다.

생성된 jar 파일을 홈으로 복사한 후 다음 명령어를 사용하여 실행한다.

$ java -jar springboot-lala-market-0.0.1-SNAPSHOT.jar &

AWS EC2는 Ubuntu Linux OS를 사용하므로 Windows OS에서 동작할 때와 약간 차이가 있다. 따라서 일부 수정이 필요하다.

1. basic.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<th:block th:fragment="setContent(content)">
        <th:block th:replace="~{./layout/header :: header}">
        </th:block>
    <div class="container-fluid">
        <th:block th:replace = "${content}"></th:block>
    </div>
    <th:block th:replace="~{./layout/footer :: footer}">
    </th:block>
</th:block>
</html>

windows OS에서는 <th:block th:replace="~{/layout/header :: header}"> 라고 하여도 동작하나 "./layout"으로 수정을 해주어야 한다. 이하 다른 파일도 동일하다.

2. HomeController.java

package kr.talanton.lala.main.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

import lombok.extern.log4j.Log4j2;

@Controller
@Log4j2
public class HomeController {
        @GetMapping("/")
        public String home(Model model) {
                log.info("home...");
                return "home";
        }
}

home() 메소드의 반환형으로 view 페이지를 지정하기 위하여 Windows OS에서는 "/home"을 사용하나, AWS EC2에서는 "home"을 사용하여야 한다. 다른 Controller일 경우도 이와 같이 처리해 주어야 한다.

아래는 브라우저에서 AWS EC2의 주소를 사용하여 접속한 경우이다.

다음과 같이 iptables을 설정하면 80 port 번호로 들어오는 패킷을 8080 포트로 port forwarding할 수 있으며, 외부에서 80 port로 접속할 수 있다.

$ sudo iptables -A PREROUTING -t nat -p tcp --dport 80 -j REDIRECT --to-ports 8080

반응형
Posted by 세상을 살아가는 사람
,