망나니 AWOS의 일상
article thumbnail
[python] 위클리 챌린지 - 2주차 상호평가

문제 설명 간단한 문제 설명 자기 자신을 평가한 점수가 다른 학생이 평가해준 점수보다 유일한 최고점이거나 최저점이라면 평균을 구할 때 제외한다. 단, 최고점이나 최저점이 여러 개라면 제외하지 않고 평균을 구하고 학점을 부여한다. 문제 풀이 처음에 주어진 함수는 이렇다. def solution(scores): answer = '' return answer 위의 메서드와 입출력 예를 보면 2차원 배열의 scores가 인자로 들어가 있다. 입출력 예 1번을 풀어서 보여주겠다. 입력을 받으면 1번과 같이 표현을 할 수 있다. 행(가로) 방향으로 보면 A학생이 A~E학생의 평가한 점수를 나타내는 것이고 열(세로) 방향으로 보면 A학생의 점수를 볼 수 있게 된다. 그리고 자기 자신을 평가한 점수가 간단한 설명에서도..

article thumbnail
[python] 백준 2863번 이게 분수?
알고리즘/백준 2021. 10. 14. 21:54

문제 풀이 2*2짜리 표 -> 2차원 배열을 이용 시계방향으로 회전 후에 4회전 시에는 원점으로 돌아오기 때문에 회전을 담당해줄 메서드, 표의 값을 계산해줄 메서드가 필요. 값을 스왑 해주기 위해 시계방향으로 1회전, 2회전, 3회전 돌렸을 때의 좌표값들을 적어보았고 그 좌표값들을 스왑 해주기 위해 temp 변수를 하나 초기화해주어 swap 해주었다. 간단하게 if문으로 돌릴 수도 있었겠으나 요즘은 배열에 대해서 좀 연습을 하는 중이라서 배열을 써보았다. 완성된 코드!!😀😀 # swap def swap(l): temp = l[0][0] l[0][0] = l[1][0] l[1][0] = l[1][1] l[1][1] = l[0][1] l[0][1] = temp return l # 계산 def cal(l): ..

article thumbnail
[python] 위클리 챌린지 - 1주차 부족한 금액 계산하기

해당 문제는 전에 java로 한번 풀었던 것이다. [java] 프로그래머스 - 부족한 금액 계산하기 내가 본 프로그래머스 문제들은 대부분 어려워 보였는데 이웃님들 중 한 분께서 프로그래머스 문제를 python으로 푸셨다. 문제 내용을 보고 나서 오! 나도 풀 수 있겠다 싶어서 풀어보았다. 제한 begin-dev-awos.tistory.com price : 놀이기구 이용료, money : 내가 가지고 있는 돈, count : 놀이기구 탄 횟수 문제는 간단하게 설명하자면 놀이기구를 타는데 놀이기구를 한번 타면 처음 이용료 그대로 n번 탔을 시 price * n으로 누적이 된다고 한다. 입력 price : 3, money : 20, count : 4 ex) 3번 탔을시 총금액 3*1 + 3*2 + 3*3 + ..

article thumbnail
[python] 백준 2052번 지수연산
알고리즘/백준 2021. 10. 1. 22:10

문제 요약 및 풀이 문제 자체는 간단하다. 2의 -N승을 계산하면 된다. 하지만 기본적으로 표현할 수 있는 소수점 자릿수를 넘어가게 되면 e^n, e^-n으로 표기가 된다. 그래서 표현할 수 있는 소수점 자리수를 늘리려면 늘리고 싶은 자리 개수를 sosu_N이라고 생각하면 "%. sosu_Nf"와 같이 만들어 주면 된다. 대략 sosu_N을 300으로 조절하면 아래와 같은 결과를 볼 수 있다. 0 같은 경우 rstrip() 메서드를 통해 오른쪽에 있는 0을 지워주면 된다. 완성된 코드!! 😀😁 print(("%.300f" % (1/(2**int(input())))).rstrip("0"))

article thumbnail
[python] 백준 2154번 수 이어 쓰기 3
알고리즘/백준 2021. 9. 29. 21:41

문제 요약 및 풀이 문제는 간단하다. N 15를 입력받았을 때 해당 15가 몇 번째에 나타나는지만 알면 된다. 먼저 N의 범위가 1 ≤ N ≤ 100,000 이기 때문에 1부터 100000까지 문자열로 붙여준 후에 find나 index 함수로 해당 위치의 값을 뽑아주면 된다. 단지 find나 index의 값이 0부터 시작이기 때문에 1을 더해주고 결과를 반환해주면 된다. ex) 입력이 1이라면 1번째라고 결과가 나와야 하지만 배열에서 index는 0부터 시작이기 때문에 결과가 0이 나오게 된다. 완성된 코드!!😀😀 s = "" for i in range(1, 100001): s += str(i) print(s.index(input())+1)

article thumbnail
[python] 백준 20112번 사토르 마방진
알고리즘/백준 2021. 9. 21. 18:04

문제 요약 및 풀이 N을 입력받으면 N X N 만큼 크기의 단어 집합이 만들어진다. 이 단어 집합은 가로 단어와 세로 단어가 같다. (사토르 마방진의 개념) 사토르 마방진이면 YES를 아니면 NO를 출력 2차원 배열로 풀 생각으로 그려보았다. N X N 만큼이라고 했으니 2차원 배열로 [N][N] 크기만큼 두 개의 배열을 만들어 놓는다. 사토르 마방진은 가로 단어와 세로 단어가 같다고 했기 때문에 두 개의 배열(가로 단어 집합, 세로 단어 집합)을 만들어야겠다고 생각했다. 입력받는 값들을 보면 가로로 단어를 입력받기 때문에 해당 집합을 그림과 같이 나타내 보면 세로는 대칭이라고 볼 수 있다. 2차원 배열의 특징인 [i][j]를 [j][i]로 스왑 하여 세로 단어 집합의 배열을 만들면 된다. 이해가 잘 되..

article thumbnail
[python] 백준 11723번 집합
알고리즘/백준 2021. 9. 16. 22:46

문제 풀이 및 요약 문제 이해가 잘 안 되시는 분들에게 직접 그림을 그려서 보여드리겠다. check x를 통해서만 x가 있는지 없는지를 판단하여 있으면 1을 출력, 없으면 0을 출력한다. 나머지 add, remove, toggle / empty, all 등은 값 삽입, 삭제가 이루어진다. 문제에도 나와 있다시피 집합이기 때문에 set()을 써야 한다. 얼핏 보면 set 도 {} 중괄호를 사용하고 있어 {} 중괄호를 사용하는 딕셔너리와 헷갈릴 수도 있으나 set 같은 경우 값이 하나 {1, 2, 3}이고 딕셔너리 같은 경우 {'key1' : 'value1', 'key2' : 'value2'}와 같이 key와 value로 이루어져 있다. 처음에 set()을 생각을 못하고 list로 접근하여 풀어서... 당연..

article thumbnail
[python] 백준 1094번 막대기
알고리즘/백준 2021. 9. 16. 21:14

문제 요약 및 풀이 문제를 보자마자 아 그림으로 풀어야겠다 싶어서 그림으로 그려봤다. 순서는 ① -> ② -> ③ 순대로 보면 될 것 같다. 64를 반으로 나누면 32, 32 2개의 막대가 나오는데 하나의 막대는 버려야 하므로 절반으로 나누어 떨어질 때까지 문제에 있는 2가지 과정을 반복하다 보면 ②번과 같은 64 32 16 8 4 2 1 이 보여진다. 수 들의 공통점은 2^n 승이라는 것. 즉, 2진수로 표현이 가능하다. ③번과 같이 10진수로 입력을 받아 2진수로 변환을 해준후 1의 개수가 총 몇 개인지를 반환해주면 된다. 완성된 코드!!👍😊 print(bin(int(input()))[2:].count('1'))

article thumbnail
[univ-lect-scrapper] 진행상황(2)

교수명으로 강의 검색 기능, 과목명으로 강의 검색 기능을 추가하였다. 정확히는 교수명이 예를 들어 홍길동이라고 한다면 해당 강의 주소, 교수명, 과목명에서 홍길동이라는 문자열이 있다면 그 주소를 리턴 시켜주는 것이다. 과목명도 마찬가지로 디자인이라는 문자열이 있다면 그 주소를 리턴 시켜주는 것이다. 그리고 대략 1000개의 데이터를 돌릴 때 requests.exceptions.ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')) 해당 오류가 발생하여서 예외처리를 해두었다. 해당 오류가 발생했을 때 header 관련 오류가 있어서 header 문제인지 알고 head..

article thumbnail
[python] 백준 1668번 트로피 진열
알고리즘/백준 2021. 9. 15. 01:28

문제 요약 및 풀이 간단하게 그림으로 그려서 보여드리겠습니다. 졸라맨 같은 사람은 문제에 나오는 민식이 입니다. 민식이가 선반을 왼쪽에서 보느냐 오른쪽에서 보느냐에 따라서 보이는 트로피의 개수가 다르기 때문에 이렇게 그림을 그려봤습니다. 선반을 오른쪽에서 왼쪽으로 바라봤다면 낮은 트로피부터 높은 트로피까지 총 5개가 보이는 것이고 반대로 선반을 왼쪽에서 오른쪽으로 바라봤다면 높은 트로피가 가장 먼저 보이게 되기 때문에 총 1개가 보이게 됩니다. 그 점을 생각하고 풀어주시면 됩니다. 완성된 코드!!👍😊 처음 코드 N = int(input()) h = [] max = -1 count = 0 for i in range(N): h.append(int(input())) if max < h[i]: max = h[i..

article thumbnail
[python] 백준 1075번 나누기
알고리즘/백준 2021. 9. 13. 23:28

문제 요약 및 풀이 N이 1000이고 F가 3일 때, N의 일의 자리, 십의 자리를 적절하게 제일 작게 바꿔서 바뀐 N을 F로 나누어 떨어지게 만들어야 한다. 바뀐 N은 1001이고 결과 출력 값은 02가 되는 것. 내가 생각한 풀이는 1. N을 입력받아서 일단 해당 일의 자리와 십의 자리를 00으로 바꿔줌 2. 바뀐 N을 int형으로 바꾸어서 F와 떨어지는지 확인 후 떨어지지 않는다면 1씩 누적시켜서 F와 떨어질 때까지 확인 3. 나누어 떨어진다면 해당 N의 십의자리와 일의 자리를 출력 3번은 슬라이싱으로 쉽게 표현할 수 있다. 아래의 표를 통해 N = 266, F가 9일 때의 결과를 출력해보겠다. N (입력) F (입력) 바뀐 N N % F N[-2:] (출력) 266 9 200 False 201 F..

article thumbnail
[univ-lect-scrapper] 진행상황(1)

beautifulsoup로는 사이트의 정보를 추출할 수 있지만 자바스크립트 같은 동적으로 생성된 정보들은 가져올 수 없다. 그래서 selenium을 이용해야 한다. 해당 스크래핑하려는 해당 과목 강의의 공지사항이나 자료실 같은 링크를 개발자 도구로 열어보면 아래와 같이 되어있다. 헬로우 일단 전체적인 코드가 beautifulsoup를 이용하기 위해 관련된 메서드를 이용해서 selenium + beautifulsoup 두 가지를 사용할 수 있도록 라이브러리를 import 하고 약간의 리팩토링을 했다... 리팩토링 후 본래 있던 코드들은 정상 작동하였고... 이제 문제점을 해결하려고 했다.. 전달해주는 값이 잘못되었는지... 이렇게 뜬다. 아무래도 수강 신청하지 않은 강의라서 그런 것 같은데... 이게 문제..

article thumbnail
[python] 백준 1977번 완전제곱수
알고리즘/백준 2021. 9. 9. 23:34

문제 요약 및 풀이 완전제곱수. 64의 제곱근 8, 8을 제곱하게 되면 다시 64가 된다. 내가 생각한 풀이다. 제곱근을 구하고 정수형으로 타입 변환을 해준후에 다시 제곱하면 완전제곱수가 될 것이라고 생각했다. M N i = M int(i**0.5) T = int(i**0.5)**2 i == T sqrt_list 60 100 60 7 49 False 61 7 49 False 62 7 49 False 63 7 49 False 64 8 64 True 64 .... ... ... .... .... 100 10 100 True 64, 81, 100 표와 같이 결과가 나온다. 나머지는 M이상 N이하의 자연수 중에 완전제곱수가 없을 때에는 -1을 출력, 아니면 첫째줄에 합과 둘째 줄에 최솟값을 출력해주면 된다. 완..

article thumbnail
[python] 백준 1453번 피시방 알바
알고리즘/백준 2021. 9. 7. 23:35

문제 요약 및 풀이 피시방 자리는 1번부터 100번까지 있다. 처음에는 모두 비어있고, 들어오는 손님은 자기가 앉고 싶은 자리에만 앉고 싶어 한다. 해당 자리에 사람이 있으면 거절당한다. 거절당한 사람 수 출력 표로 정리해보았다. sit : 자리 번호 (1 ~ 100) N : 손님의 수 customer : 손님이 앉고 싶은 자리 cnt : 거절 당한 사람 수(누적) 1 5 1 0 2 2 0 3 3 0 4 2 1 5 3 2 ... 이미 1, 2, 3번 자리에는 자리가 있으니... 나중에 들어온 4번째, 5번째 손님이 앉고 싶은 자리 2번, 3번을 못 앉게 된다. 그럼 출력 결과는 2가 나오게 된다. 아래의 코드를 보면 sit의 배열의 크기를 미리 101개를 만들어두었다. 자리는 1~100까지 있지만 배열의..

article thumbnail
학교 강의 사이트 스크래핑
일상/일기 2021. 9. 7. 18:00

일단 오늘 17시까지 수강신청은 끝났다. 듣고 싶었던 강의(웹디자인2)를 신청을 취소했다... ㅠㅠ 미리 말해놓지만 교수님께 나중에 수강신청 취소하더라도 강의 혹시 들을 수 있을까요? 라고 여쭤본 후에 된다고 해서 강의 사이트를 들어가기 위해 스크랩한 것이다. (도강이 아닌 청강...) 지난 1학기 때 같은 경우 즐겨찾기 하면 그 강의를 볼 수가 있었다... (그때 알았었죠... 사이튼 보안 와...) 하지만 어제 막힌 걸 알고 '아 듣고 싶은데...' 그 간절함으로 학교 사이트 웹 스크래핑을 하게 되었다. 우리 학교 사이트는 수강신청을 안한강의는 열람이 원래는 안된다. 이거는 타학교도 마찬가지라고 보는데... 웹디자인2 강의를 청강하기 위해 학교 사이트를 스크래핑하려는 미친놈은 나하나 밖에 없을 거고...

article thumbnail
[python] 백준 1357번 뒤집힌 덧셈
알고리즘/백준 2021. 9. 6. 17:30

문제 요약 및 풀이 X, Y가 주어졌을 때, X, Y를 Reverse 시키고 합을 구한 후에 다시 Reverse를 시키면 된다. 처음에 문제를 제대로 읽지 않아... X, Y의 합을 구하고 Reverse를 시켰다. 틀려서 다시 대충 읽고 X, Y의 각각에 대해 Reverse를 시키고 합을 구했다. 또다시 틀려서 제대로 읽고 풀었다. 표로 작성을 해보면 아래와 같이 된다. X, Y를 입력받고 표의 오른쪽으로 진행이 된다고 볼 수 있다. X Y T = reverse(X) K = reverse(Y) T+K reverse(T+K) 123 100 321 1 322 223 그냥 간단하게 문자열의 슬라이싱과 리스트를 이용하여 돌렸다. 슬라이싱을 통해 reverse를 구현하였다. 완성된 코드!! 👍😊 s = input..