반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PzOCKAigDFAUq 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


T = int(input())

for tc in range(1, T+1):
    N, M = map(int, input().split())

    fly = [list(map(int,input().split())) for _ in range(N)]
    attack = [[0]*M for __ in range(M)]
    max_num = 0

    for i in range(N-M+1):
        for j in range(N-M+1):
            add_num = 0
            for fly_i in range(M):
                for fly_j in range(M):
                    add_num += fly[i+fly_i][j+fly_j]
                    if add_num > max_num:
                        # print(add_num)
                        max_num = add_num

    print('#{} {}'.format(tc, max_num))

2차원 배열을 입력받고 접근 할 수 있어야 풀 수 있는 문제!

모기가 있는 2차원 배열을 만들고

파리채 2차원 배열을 만들어 파리채의 (0, 0)지점부터 파리채 크기만큼의 구역에 모기가 몇마리 있는지 계산 후

max_num에 넣고 출력한다

반응형
반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=2&contestProbId=AV5PyTLqAf4DFAUq&categoryId=AV5PyTLqAf4DFAUq&categoryType=CODE&problemTitle=&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=2&pageSize=10&pageIndex=1 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


def palindrome(word):
    if word == word[::-1]:
        return 1

    else:
        return 0
        
test_case = int(input())

for i in range(test_case):
    word = input()
    
    print(f'#{i+1}', end = ' ')
    
    print(palindrome(word))

슬라이싱을 이용해 문자를 뒤집고 뒤집어진 문자와 원래 문자가 같으면 1을 출력하도록 구현했다

반응형
반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PmkDKAOMDFAUq 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

간단한 압축풀기


T = int(input())

for tc in range(1, T+1):
    N = int(input())
    text = ''
    for n in range(N):
        alpa, num = input().split()
        text += alpa*int(num)
    print('#{}'.format(tc))
    for i in range(1,len(text)+1,10):
        print(text[i-1:i+10-1])

압축을 푸는건 어렵지 않지만 압축을 풀어서 나열해둔 text를 10개씩 나열하는거에서 생각을 조금 해야했다

for 문에서 숫자가 10씩 증가하고 슬라이싱으로 i에서 i+10까지 출력하게 해서 코드를 완성해봤다!

반응형
반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PnnU6AOsDFAUq 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

날짜 계산기


# 1948. 날짜 계산기
month = {1:31, 2:28, 3:31, 4:30, 5:31, 6:30, 7:31, 8:31, 9:30, 10:31, 11:30, 12:31}

T = int(input())

for tc in range(1, T+1):
    ans = 0
    fm, fd, sm, sd = map(int, input().split())
    if fm == sm:
        ans = sd - fd
    else:
        for i in range(fm, sm+1):
            if i == fm:
                ans += (month[i] - fd)
            elif i == sm:
                ans += sd
            else:
                ans += month[i]
    print('#{} {}'.format(tc, ans+1))

처음에는 month를 모두 if else로 처리해야하나 막막했는데

딕셔너리를 이용해서 쉽게 풀 수 있었다

월이 같은 경우에는 날짜만 빼주면 되니깐

fm==sm인 경우는 미리 계산해주고,

월이 다른 경우를 else에서 계산해주었다.

 

month(key)로 딕셔너리 values값에 접근하고 그 수를 더해주면 된다!

 

날짜는 세는 당일도 쳐야하기 때문에 마지막에 ans에서 +1

반응형
반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5LrsUaDxcDFAXc 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


# 백만 장자 프로젝트

T = int(input())

for tc in range(1, T+1):
    N = int(input())
    price = list(map(int,input().split()))

    max_num = 0
    ans_price = 0

    for i in range(N-1,-1,-1):
        if price[i] > max_num:
            max_num = price[i]
        else:
            ans_price += max_num - price[i]

    print('#{} {}'.format(tc, ans_price))

뒤에서부터 탐색하며 max_num에 최대값을 넣어주고 최대값보다 작은 값이 나오면 최대값 - 현재값을 ans_price에 넣어줬다

뒤에서 부터 탐색하면 어렵지 않은 문제!

 

예제 입력값으로 주어지는 값이 메모장 버전과 사이트 버전이 달라서 조금 당황스러웠지만 예외 없이 잘 작동되어서 다행이다.

반응형
반응형

첫번째 장고 프로젝트

https://www.behance.net/gallery/123065755/Food-Barter-UXUI-Design-

 

Food Barter UX/UI Design 식재료 물물교환 어플

식재료를 교환하고 공동구매의 장을 열어주는 ‘물롬’은 1인가구의 식재료 낭비와 그 비용을 절감시켜주고 버려지는 재료들은 교환함으로써 환경에 도움을 주고자 합니다.

www.behance.net

동기들과 함께 했던 앱 프로젝트 '물롬'을 웹 형식으로 소개할 수 있는 페이지를 만들어보려고 한다.

마무리 작업때는 개발을 시작해서 많이 참여하지 못했는데 너무 칭구들이 잘 만들어줬다 짱짱맨

지금 내가 django로 구현할 수 있는 페이지가 CRUD 밖에 없고 bootstrap을 활용한 디자인에 매우 서툴러서 디자인보다는 기능적인 부분을 일단 설계하고, 내 능력 안에서 할 수 있는 만큼 만들고 난 후에 나중에 시간이 지나면 다시 리디자인 하는 식으로 진행을 하려고 한다.

 

프로젝트 생성 과정

* vs code 에서 진행 *

 

1. 터미널 창에서 가상환경 설치 

python -m venv venv

2. 가상환경 연결하기

source venv/Scripts/activate

3. 장고 설치

pip install django

4. requirements 파일 생성

pip freeze > requirements.txt

5. project 생성

django-admin startproject project_name .

- 가장 뒤에 . 을 붙이면 해당 폴터에 바로 프로젝트가 생성된다.

  .을 안붙이고 생성하면 project_name 폴더가 생성되고 그 내부에 project_name 프로젝트가 만들어진다.

 

6. app 생성

python manage.py startapp app_name

 

7. app 생성 후 project > settings > INSTALLED_APPS에 app 등록

8. README.md 와 .gitignore 만들어주기

나중에 프로젝트를 git 에도 올려줄 예정이니깐 README.md랑 .gitignore도 만들어주자!

https://www.toptal.com/developers/gitignore

 

gitignore.io

Create useful .gitignore files for your project

www.toptal.com

생성 후 나온거 복사해서 내 .gitignor에 붙여넣으면 된다!

반응형
반응형

https://www.acmicpc.net/problem/2869

 

2869번: 달팽이는 올라가고 싶다

첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)

www.acmicpc.net

문제

땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.

달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.

달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)

출력

첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.


처음 실패한 코드

A, B, V = map(int, input().split())  # A 올라가는 거리 B 미끄러지는 거리 V 나무 길이
day = 0
distance = 0

while True:
    day += 1
    distance += A
    if distance >= V:
        break
    distance -= B


print(day)

답은 나오지만 시간 초과로 실패한 코드다

A,B,V는 1,000,000,000 라... while이 최대 999,999,999번? 까지 돌 수도 있다... 장수 달팽이

 

계산으로 풀어야 한다.

최종코드

A, B, V = map(int, input().split())  # A 올라가는 거리 B 미끄러지는 거리 V 나무 길이

day = 0

if (V-A) % (A-B) == 0:
    day = (V - A) // (A - B) + 1
else:
    day = (V - A) // (A - B) + 2
print(day)

마지막 날은 미끄러지지 않으니깐 나무 길이에서 하루 올라가는 거리만큼을 뺀다

그리고 올라가는 만큼 나눠준다

+1을 해준건 첫날의 카운트가 0이 아니라 1이어야 하기 때문,

+2를 해준건 나무길이 / 올라가는거리 했을 때 소수점이 나오면 올림을 해줘야하기 때문이다.

반응형
반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5Pw_-KAdcDFAUq 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


# 1984. 중간 평균값 구하기

T = int(input())

for tc in range(1, T+1):
    num = list(map(int,input().split()))
    min_num = 10000
    max_num = 0

    for i in num:
        if min_num > i:
            min_num = i
        if max_num < i:
            max_num = i
    num.remove(min_num)
    # print(num)
    num.remove(max_num)
    # print(num)

    add = 0


    for i in num:
        add += i
    ans = add/len(num)

    print('#{} {:.0f}'.format(tc,ans))

num에서 최소값과 최대값을 빼기 위해 remove 메서드를 이용했다

처음에 pop을 이용해서 삭제하려고 했는데

remove(값)

pop(인덱스)

라는걸 잊고 pop(값)을 해줘서 계속 인덱스 오류가 발생했다.

만약 pop을 이용하려면 num리스트를 정렬한 후 가장 첫번째 값과 맨 끝값을 pop으로 삭제할 수 있었을 것 같다.

반응형
반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PwGK6AcIDFAUq 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


# 1983. 조교의 성적 매기기
grade = ['A+', 'A0', 'A-', 'B+', 'B0', 'B-', 'C+', 'C0', 'C-', 'D0']
T = int(input())
for tc in range(1, T+1):
    N, K = map(int,input().split())
    score_list = []
    sort_list = []
    for i in range(N):
        m_test, f_test, hw = map(int, input().split())
        score = (0.35*m_test + 0.45*f_test + 0.2*hw)
        score_list.append(score)
        sort_list.append(score)


    # score_list 정렬
    for i in range(N):
        for j in range(i,N):
            if sort_list[i] < sort_list[j]:
                sort_list[i],sort_list[j] = sort_list[j], sort_list[i]

    for i in range(N):
        if sort_list[i] == score_list[K-1]:
            grade_idx = i//(N//10)

            print('#{} {}'.format(tc, grade[grade_idx]))

알고리즘을 처음 접할 무렵 어떻게 해서도 풀 수 없었던 문제를 지금 풀게 되어 너무 기쁘다

이 문제도 풀면서 문제가 많았는데

나는 score_list와 sort_list로 받아온 점수와 그것을 정렬한 점수 리스트를 나누어서 K가 몇등인지 알아내려고 했다

어차피 sort_list를 받기 위해서는 score_list를 받아오고 그걸 정렬해야해서

sort_list = score_list

이렇게 처음 sort_list를 받아온 후 정렬을 했는데 이런식으로 정렬을 진행하면 sort_list를 정렬 한 후

score_list도 sort_list와 같이 정렬이 되어버린다는 문제가 생긴다

 

리스트 호출에 대한 개념이 부족해서 생긴 실수다. 이론 공부를 해야겠다

반응형
반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV13zo1KAAACFAYh 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


카운팅 알고리즘을 이용해서 풀이

2021.08.23 - [분류 전체보기] - [알고리즘] 카운팅정렬 이해하기


# [s/w 문제해결 기본] 1일차 - 최빈수 구하기

T = int(input())

for tc in range(1, T+1):
    test_case = int(input())
    score_list = list(map(int,input().split()))
    max_num = 0
    max_idx = 0

    counts = [0] * 101

    for i in range(1000):
        counts[score_list[i]] += 1
    # print(counts)

    for i in range(101):
        if counts[i] >= max_num:
            max_num = counts[i]
            max_idx = i
    print('#{} {}'.format(tc, max_idx))

처음에 큰 수의 index를 받기 위해 

    for i in range(101):
        if counts[i] >= max_num:
            max_num = counts[i]
            max_idx = score_list.index(max_num)
    print('#{} {}'.format(tc, max_idx))

이 방법을 이용해서 풀었는데 이렇게되면 max_num은 큰 인덱스 값을 가리칠지언정 max_idx가 가져오는 값은 결국 'max_num과 같은 값을 가지고 있는 가장 작은 값'이 나오기 때문에 문제에서 주어지는

단, 최빈수가 여러 개 일 때에는 가장 큰 점수를 출력하라

조건을 지킬 수 없다

 

index값을 어떻게 받아올 수 있을지 리스트를 뒤에서부터 정렬도 해보고 별짓을 다 했는데

결론은 그냥 i 값을 받아오면 되는거였다.

반응형

+ Recent posts