반응형

1. 시험환경

    · 윈도우

    · 파이썬

    · vsCode

 

2. 목적

    · 파이썬 개발환경에서 가상환경 초기화 하는 방법을 알아보자.

    · 가상환경 활성화/비활성화 방법을 알아보자.

    · 가상환경에서 설치한 패키지를 리스트 목록으로 저장한다.

 

3. 적용

    ① 가상환경 생성

        - 명령어 : python -m venv [가상환경이름]

가상환경 초기화
가상환경 폴더 생성

 

    ② 가상환경 활성화/비활성화 명령어를 실행한다.

        - 활성화 명령어 : ./[가상환경이름]/Scripts/activate.bat

        - 비활성화 명령어 : ./[가상환경이름]/Scripts/deactivate.bat

 

    ③ 설치된 패키지 목록을 txt 파일로 저장한다.

        -  명령어 : pip freeze > requirements.txt

프로젝트에 필요한 패키지 설치 후 패키지 목록 저장
패키지 목록 저장 결과

 

    ④ 패키지 목록이 저장된 txt파일은 다른 프로젝트에서 동일한 패키지/버전으로 복원할 수 있다.

        -  명령어 : pip install -r requirements.txt

반응형
반응형

1. 시험환경

    · wordpress(워드프레스)

    · python(파이썬)

 

2. 목적

    · 워드프레스에 글을 자동으로 포스팅하기 위한 파이썬 프로그램을 작성한다.

    · 글 자동 발행을 위한 워드프레스 설정을 알아보자.

 

3. 적용

    ① LocalPC 설치 또는 호스팅 업체를 통한 설치 등 워드프레스가 설치되어 있어야 한다.

        - LocalPC 설치 참고: https://languagestory.tistory.com/327

 

Docker 기반 워드프레스 초기 설치

1. 시험환경    ˙ 윈도우 11    ˙ MySQL 5.7    ˙ Docker, Docker-Compose 2. 목적    ˙ 도커, 도커컴포즈 기반으로 워드프레스를 설치한다.    ˙ DB 및 Wordpress 데이터를 로컬 드라이브에 별도로 저장한

languagestory.tistory.com

 

    ② 워드프레스 설치시 입력한 관리자 계정으로 로그인하여 관리자 대시보드에 접속한다.

        - https://<<워드프레스주소>>/wp-admin

 

    ③ 관리자 대시보드 → [설정]    [고유주소]  → "글 이름"으로 변경한다.

 

    ④ 브라우저 또는 Postman 등에서 URL 호출 하면, 반드시 JSON 형식의 매우 복잡한 데이터가 응답되어야 한다.

        - http://<<워드프레스 주소>>/wp-json/wp/v2/posts

 

 

    ⑤ 글 발행을 위한 파이썬 프로그램을 작성 후 실행한다.

        - WP_URL : 본인의 워드프레스 URL주소(443포트인 경우 https, 그 외의 경우 https)

        - WP_USER : 워드프레스 사용자 ID

        - WP_PASSWORD : 워드프레스 사용자 PW

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import requests
from requests.auth import HTTPBasicAuth
 
# 워드프레스 API 설정
WP_URL = "http://<<워드프레스주소>>/wp-json/wp/v2/posts"  # 워드프레스 REST API URL
WP_USER = "<<wordpress-user-id>>"   # 워드프레스 사용자 이름
WP_PASSWORD = "<<wordpress-user-pw>>"  # 애플리케이션 비밀번호
 
def create_post(title, content, categories=None, tags=None, status="publish"):
    """
    워드프레스에 게시글을 작성하는 함수.
    
    :param title: 게시글 제목
    :param content: 게시글 내용 (HTML 지원)
    :param categories: 카테고리 ID 리스트 (선택 사항)
    :param tags: 태그 ID 리스트 (선택 사항)
    :param status: 게시글 상태 ("publish", "draft" 등)
    :return: API 응답 데이터
    """
    headers = {
        "Content-Type""application/json"
    }
 
    data = {
        "title": title,
        "content": content,
        "status": status,
    }
    
    if categories:
        data["categories"= categories
    if tags:
        data["tags"= tags
 
    response = requests.post(
        WP_URL,
        headers=headers,
        json=data,
        auth=HTTPBasicAuth(WP_USER, WP_PASSWORD)
    )
 
    if response.status_code in [200201]:
        print("게시글이 성공적으로 작성되었습니다!")
        return response.json()
    else:
        print(f"오류 발생: {response.status_code}")
        print(response.json())
        return None
 
 
# 게시글 작성
if __name__ == "__main__":
    title = "테스트 게시글 제목"
    content = "<p>이것은 테스트 게시글의 내용입니다.</p>"
    
    # 카테고리와 태그 ID는 워드프레스 관리 패널에서 확인 가능
    categories = [1]  # 예: "뉴스" 카테고리
    tags = [35]     # 예: "Python", "자동화" 태그
 
    post_response = create_post(title, content, categories, tags)
    if post_response:
        print("게시글 URL:", post_response.get("link"))
 
cs

 

4. 결과

    · 파이썬 프로그램을 통해 포스팅이 작성된 것을 확인한다.

 

 

 

반응형
반응형

1. DFS(Depth First Search; 깊이 우선 탐색)의 개념

■ 루트 노드[또는 임의의 노드]에서 시작하여 형제 (sibling) 노드로 넘어가기 전에 시작한 분기의 마지막 노드까지 깊게 탐색하는 방법

 그래프에서 모든 노드를 한번씩 탐색하기 위한 방법

■ 스택 또는 재귀함수를 이용하여 구현

 

2. DFS 노드 방문 순서

■ 결과 : 1 → 2 → 4 → 5 → 6 → 3 → 7 → 10 → 8 → 9

    - step1) 도달 가능한 마지막 노드(막다른 길)까지 이동한다.

    - step2) 지나처 온 최근 갈림길(형제노드)로 되돌아 간다.

    - step3) 모든 노드를 탐색할 때까지 step1과 step2를 반복한다.

 

3. 그래프 표현

그래프는 인접 리스트로 보기 쉽게 표현할 수 있다.

1 2, 3
2 1, 4
3 1, 7, 8, 9
4 2, 5, 6
5 4
6 4
7 3, 10
8 3
9 3
10  

 

■ 인접리스트는 2차원 배열[리스트] 또는 테이블[dictionary] 자료구조로 정의할 수 있다.

 

4. 파이썬 코딩

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
def dfs(graph, start, visited = []):
    visited.append(start)
 
    for node in graph[start]:
        if node not in visited:
            dfs(graph, node, visited)
 
    return visited
 
 
if __name__ == '__main__':
    graph = dict() 
    graph['1'= ['2''3']
    graph['2'= ['1''4']
    graph['3'= ['1''7''8''9']
    graph['4'= ['2''5''6']
    graph['5'= ['4']
    graph['6'= ['4']
    graph['7'= ['3''10']
    graph['8'= ['3']
    graph['9'= ['3']
    graph['10'= ['7']
 
    result = dfs(graph, '1')
    print(result)
cs

 

5. JavaScript 코딩

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function dfs(graph, v, visited = []) {
    
    visited[v] = true;
    console.log(v);
  
    for (let node of graph[v]) {
      if (!visited[node]) {
        dfs(graph, node, visited);
      }
    }
  }
 
 
graph = []
graph['1'= ['2''3']
graph['2'= ['1''4']
graph['3'= ['1''7''8''9']
graph['4'= ['2''5''6']
graph['5'= ['4']
graph['6'= ['4']
graph['7'= ['3''10']
graph['8'= ['3']
graph['9'= ['3']
graph['10'= ['7']
 
result = dfs(graph, '1')
console.log(result)
cs

 

 

반응형

'알고리즘(코딩테스트)' 카테고리의 다른 글

[백준] 주유소  (0) 2024.10.05
[백준] 수들의 합  (0) 2024.10.05
[백준] 설탕 배달  (0) 2024.10.04
[백준] 읽어버린 괄호  (0) 2024.10.04
[백준] ATM  (1) 2024.10.03
반응형

1.  문제

■ URL : https://www.acmicpc.net/problem/13305

 

2. 핵심요약

■ 문제유형 : 탐욕(Greedy) 알고리즘

■ 1번째 Row: 도시의 개수를 나타내는 정수 

■ 2번째 Row: 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1개의 자연수로 구성

■ 3번째 Row: 주유소의 리터당 가격이 제일 왼쪽 도시부터 순서대로 N개의 자연수로 구성

 

3. 문제풀이 접근

■ 첫번째 도시에서는 가격에 상관없이 주유를 할 수밖에 없다.

■ 두번째 도시부터는 다음(오른쪽) 도시들의 가격과 비교하여 미리 주유 여부를 결정한다.

 

4. 파이썬 코딩

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
isTest = True
if isTest:
    f = open("./13305.txt"'r')
    city_cnt = int(f.readline())
    distArr = list(map(int, f.readline().split(' ')))
    priceArr = list(map(int, f.readline().split(' ')))
else:
    city_cnt = int(input())
    distArr = list(map(int, input().split(' ')))
    priceArr = list(map(int, input().split(' ')))
 
sum = 0
minPrice = priceArr[0]
for i in range(len(priceArr) - 1):
  if minPrice > priceArr[i]:
    minPrice = priceArr[i]
 
  sum += minPrice * distArr[i]
 
print(sum)
cs

 

5. JavaScript 코딩

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
let isTest = true
 
let fs = require('fs');
let input;
if (isTest) {
    input = fs.readFileSync('./13305.txt').toString().split('\n');
else {
    input = fs.readFileSync('/dev/stdin').toString().split('\n');
}
 
city_count = parseInt(input[0]);
distArr = input[1].split(' ').map(Number);
priceArr = input[2].split(' ').map(Number).slice(0, city_count - 1);
 
let sum = BigInt(0);
let minPrice = priceArr[0];
for (let i = 0; i < priceArr.length; i++) {
  if (minPrice > priceArr[i]) {
    minPrice = priceArr[i];
  }
  sum += BigInt(minPrice) * BigInt(distArr[i]);
}
 
console.log(String(sum));
 
cs

 

반응형
반응형

1.  문제

■ URL : https://www.acmicpc.net/problem/1789

 

2. 핵심요약

■ 문제유형 : 탐욕(Greedy) 알고리즘

■ S: 자연수의 합 (문제의 Input)

N: 합계 S가 성립하는 자연수들의 최대 갯수

 

3. 문제풀이 접근

최대한 많은 숫자를 이용하여 합계 S를 만들기 위해서는 가장 작은값(1)부터 차례대로 더해 나가야 한다.

그 다음 더해지는 숫자를 고려하여 더해지는 값이 S 보다 더 크게 될때까지 카운트한다.

 

4. 파이썬 코딩

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
isTest = True
if isTest:
    f = open("./1789.txt"'r')
    s = int(f.readline())
else:
    s = int(input())
 
current = 0
cnt = 0
 
adder = 1
 
while (s >= current):
    current += adder
 
    adder += 1
    cnt += 1
 
    if adder > s - current:
        break
 
print(cnt)
cs

 

 

5. JavaScript 코딩

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
let isTest = true
 
let fs = require('fs');
let input;
if (isTest) {
    input = fs.readFileSync('./1789.txt').toString().split('\n');
else {
    input = fs.readFileSync('/dev/stdin').toString().split('\n');
}
 
= parseInt(input[0]);
 
current = 0
cnt = 0;
 
adder = 1;
 
while (s >= current) {
    current += adder;
    console.log(current);
 
    adder++;
    cnt++;
 
    if (adder > s - current) {
        break;
    }
}
 
console.log(cnt);
cs

 

 

반응형
반응형

1.  문제

■ URL : https://www.acmicpc.net/problem/2839

 

2. 핵심요약

■ 문제유형 : 탐욕(Greedy) 알고리즘

 

3. 문제풀이 접근

먼저 큰 봉지(5kg)를 이용하여 설탕을 담는다.

남은 분량을 작은 봉지(3kg) 단위로 배분하여 정확히 떨어지는지(나머지가 0) 여부를 확인한다.

■ 작은 봉지(3kg) 단위로 배분하여 떨어지지 않으면(나머지가 0 아님) 큰 봉지(5kg)의 갯수를 하나씩 줄인다.

남은 분량이 작은 봉지(3kg) 단위로 배분하여 정확히 떨어지는면(나머지가 0) 봉지의 합이 최소값이 된다.

 

4. 파이썬 코딩

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
isTest = True
if isTest:
    f = open("./2839.txt"'r')
    N = int(f.readline())
else:
    N = int(input())
 
answer = -1
for i in range(int(N / 5), -1-1):
    remains = N - i * 5
 
    if remains % 3 == 0:
        answer = i + int(remains / 3)
        break
 
print(answer)
cs

 

 

5. JavaScript 코딩

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
let isTest = true
 
let fs = require('fs');
let input;
if (isTest) {
    input = fs.readFileSync('./2839.txt').toString().split('\n');
else {
    input = fs.readFileSync('/dev/stdin').toString().split('\n');
}
 
let N = input[0];
 
let answer = -1;
for(let i = parseInt(N / 5); i >= 0; i--) {
    let remains = N - i * 5;
 
    if (remains % 3 === 0) {
        answer = i + parseInt(remains / 3);
        break;
    }
}
 
 
console.log(answer);
cs

 

반응형

'알고리즘(코딩테스트)' 카테고리의 다른 글

[백준] 주유소  (0) 2024.10.05
[백준] 수들의 합  (0) 2024.10.05
[백준] 읽어버린 괄호  (0) 2024.10.04
[백준] ATM  (1) 2024.10.03
[백준] 동전 0  (0) 2024.10.03
반응형

1.  문제

■ URL : https://www.acmicpc.net/problem/1541

 

2. 핵심요약

첫째 줄에 식이 주어진다.

■ 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있다.

■ 가장 처음과 마지막 문자는 숫자이다. → 식의 가장 첫 부분은 양수로 시작한다.

■ 연속해서 두 개 이상의 연산자가 나타나지 않는다.

 

3. 문제풀이 접근

문제의 내용을 종합하면 아래와 같은 형태를 만들어야만 식의 결과가 최소값으로 나타난다.

 

4. 파이썬 코딩

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
isTest = True
if isTest:
    f = open("./1541.txt"'r')
    input = f.readline()
else:
    input = input()
 
q_tkn_arr = input.split('-')
 
answer = 0
for i in range(len(q_tkn_arr)):
    sub_sum = 0
    s_tkn_arr = map(int, q_tkn_arr[i].split('+'))
    for s_tkn in s_tkn_arr:
        sub_sum += s_tkn
 
    if len(q_tkn_arr) == 1 or i == 0:
        answer = sub_sum
    else:
        answer -= sub_sum
 
print(answer)
cs

 

5. JavaScript 코딩

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
let isTest = true
 
let fs = require('fs');
let input;
if (isTest) {
    input = fs.readFileSync('./1541.txt').toString().split('\n');
else {
    input = fs.readFileSync('/dev/stdin').toString().split('\n');
}
 
let q = input[0];
q_tkn_arr = q.split('-')
 
answer = 0
for (let i = 0; i < q_tkn_arr.length; i++) {
    let sub_sum = 0;
    s_tkn_arr = q_tkn_arr[i].split('+').map(Number)
    for (let j = 0; j < s_tkn_arr.length; j++) {
        sub_sum += s_tkn_arr[j];
    }
 
    if (q_tkn_arr.length === 1 || i === 0) {
        answer = sub_sum;
    } else {
        answer -= sub_sum;
    }
}
 
console.log(answer);
cs

 

반응형

'알고리즘(코딩테스트)' 카테고리의 다른 글

[백준] 주유소  (0) 2024.10.05
[백준] 수들의 합  (0) 2024.10.05
[백준] 설탕 배달  (0) 2024.10.04
[백준] ATM  (1) 2024.10.03
[백준] 동전 0  (0) 2024.10.03
반응형

1.  문제

■ URL : https://www.acmicpc.net/problem/11399

 

2. 핵심요약

■ 1번째 Row : 사람의 수 N(1 ≤ N ≤ 1,000)

2번째 Row : 각 사람이 돈을 인출하는데 걸리는 시간

1
2
5
3 1 4 3 2
cs

 

3. 문제풀이 접근

■ 문제유형 : 탐욕(Greedy) 알고리즘

최소 시간의 합을 구하기 위해서 점유시간이 낮은 사람부터 먼저 처리 되어야 한다.

 

4. 파이썬 코딩

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
isTest = True
if isTest:
    f = open("./11399.txt"'r')
    cnt = int(f.readline())
    occupy = list(map(int, f.readline().split()))
else:
    cnt = int(input())
    occupy = list(map(int, input().split()))
 
# 배열을 오름차순으로 정렬
occupy.sort()
 
sum = 0
answer = 0
for x in occupy:
    sum += x            # 각 사람이 (대기한 시간 + 돈을 인출하는데 걸리는 시간)
    answer += sum       # 각 사람이 (대기한 시간 + 돈을 인출하는데 걸리는 시간)의 누적합
 
print(answer)
cs

 

5. JavaScript 코딩

■ 배열.sort()와 배열.sort((a, b) => a - b)의 정렬 방식 차이점

    - 배열.sort() : ['3', '12', '215']인 경우, ['12', '215', '3']으로 정렬된다.

    - 배열.sort((a, b) => a - b) : ['3', '12', '215']인 경우, ['3', '12', '215']으로 정렬된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
let isTest = true
 
let fs = require('fs');
let input;
if (isTest) {
    input = fs.readFileSync('./11399.txt').toString().split('\n');
else {
    input = fs.readFileSync('/dev/stdin').toString().split('\n');
}
 
let cnt = Number(input[0]);         // 사람 수
let occupy = [];                    // 각 사람이 돈을 인출하는데 걸리는 시간
for (let i = 0; i < cnt; i++) {
    occupy.push(Number(input[1].split(' ')[i]));
}
 
// 배열을 오름차순으로 정렬
occupy.sort((a, b) => a - b);
//occupy.sort()   // 위의 것과 차이점 중요
 
let sum = 0;
let answer = 0;
for (let i = 0; i < occupy.length; i++) {
    sum += occupy[i];       // 각 사람이 (대기한 시간 + 돈을 인출하는데 걸리는 시간)
    answer += sum;          // 각 사람이 (대기한 시간 + 돈을 인출하는데 걸리는 시간)의 누적합
}
 
console.log(answer);
cs

 

 

반응형

'알고리즘(코딩테스트)' 카테고리의 다른 글

[백준] 주유소  (0) 2024.10.05
[백준] 수들의 합  (0) 2024.10.05
[백준] 설탕 배달  (0) 2024.10.04
[백준] 읽어버린 괄호  (0) 2024.10.04
[백준] 동전 0  (0) 2024.10.03

+ Recent posts