망나니 AWOS의 일상
article thumbnail
1일 1커밋(GitHub) 9달째 후기
일상/일기 2022. 4. 13. 23:53

졸업작품과 1일 1 커밋, 다른 전공의 프로젝트... 4학년이라면 당연히 졸작이 우선순위가 높지 않을까 생각한다. 그래도 1일 1커밋을 9달 이상 해오고 있기 때문에 알고리즘 한 문제 푸는 것을 잊지 않으려고 한다. 그동안 해왔던 것 덕분에 수업 내용 이해도 잘되고 고마운 1일 1 커밋 아닐까 싶다. 1년짜리 졸업작품이지만 환경설정에서 꽤나 많은 시간을 들였다. 깃을 모르는 친구들이라 git과 env 파일이라던지 ide사용법이라던지 이것저것 알려주느라 꽤 시간을 들였다. 문제는 merge나 issue, pull request라든가 그 부분인데 해야 할게 산더미다. 1인 개발한다면 기능별로 브랜치 따서 merge 하면 되겠지만... 협업을 한다면 변수명이라던지 그런 부분에서 merge를 잘못했다가는 con..

article thumbnail
3월 22일 운동
일상/일기 2022. 3. 22. 23:53

오늘 운동 루틴은 걷기 5.84km 달리기 4.23km 팔굽 (15 15 15) 45개 겨울에는 춥다고 운동을 안 나가고 개강하고 나서 바쁘다는 핑계로 운동을 안 하다 보니 살이 10kg이나 붙었다. 오늘 운동하기 전에 체중계에 올라가봤는데 충격을 먹을 정도로 살이 붙어서 당장 오늘이라도 운동을 해야겠다 싶어 나갔다. 기록상 작년 9월 23일 이후로 뛰질 않았던거 같은데 가벼웠던 내 몸뚱이가 상당히 무거워졌고 걸을 때도 종아리에 쥐가 나는 듯한 느낌이 들었다. 1시간 동안 걷기 운동을 하고서 쥐가 풀릴 즈음에 4바퀴만 뛰어봐야겠다 싶어 뛰는데 2바퀴 정도부터 숨이 벅차오르고 시야가 흐려지는 듯한 느낌이 들었다. 예전에는 이정도는 가볍게 뛰었는데 이 정도도 못 버티면 사람이 아니다 싶어 4바퀴를 돌고 욕심..

article thumbnail
[python] 백준 15651번 N과 M (3)
알고리즘/백준 2022. 3. 19. 23:47

문제 풀이 예제2 입/출력을 보게 되면 아래의 그림과 나타낼 수 있는데 이전에 풀었던 permutations 문제와 조금 다르다. [python] 백준 15649번 N과 M (1) 문제 풀이 N과 M의 입력이 주어지는데 N과 M의 조건은 아래와 같다. 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열 쉽게 말해 N에 4, M에 2가 들어왔을 경우 1, 2, 3, 4 중에 2개를 고르면 아래 begin-dev-awos.tistory.com permutations 문제에서는 자기 자신을 제외한 순서쌍이었는데 이번 문제는 자기 자신을 포함한 모든 수의 순서쌍이다. 파이썬에서 itertools 라이브러리의 product 함수가 있어 풀 수 있는 문제이다. 아래의 링크에 product 함수에 대한 설명이 ..

article thumbnail
[python] 백준 15650번 N과 M (2)
알고리즘/백준 2022. 3. 17. 23:36

문제 풀이 출력의 결과가 조합의 결과와 같은 것을 알 수 있다. 조합은 뽑는 순서 상관 없이 하나로 생각하는 경우로 순열과는 반대의 개념이다. 이런 문제들은 python에서 permutations(순열)와 combinations(조합) 함수를 사용하면 쉽게 구할 수 있다. 반대로 permutations에 대한 결과는 아래의 문제에서 확인해볼 수 있고 전반적인 코드의 내용이 같다. [python] 백준 15649번 N과 M (1) 문제 풀이 N과 M의 입력이 주어지는데 N과 M의 조건은 아래와 같다. 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열 쉽게 말해 N에 4, M에 2가 들어왔을 경우 1, 2, 3, 4 중에 2개를 고르면 아래 begin-dev-awos.tistory.com 완성된 코드..

article thumbnail
[python] 백준 15649번 N과 M (1)
알고리즘/백준 2022. 3. 16. 23:33

문제 풀이 N과 M의 입력이 주어지는데 N과 M의 조건은 아래와 같다. 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열 쉽게 말해 N에 4, M에 2가 들어왔을 경우 1, 2, 3, 4 중에 2개를 고르면 아래의 그림과 같이 수열이 뽑힌다. 이와 같이 뽑아주는 permutations를 이용하면 된다. permutations에 대한 설명은 아래의 문제에서도 풀었기 때문에 생략 [python] 백준 8892번 팰린드롬 문제 풀이 내가 생각한 방법은 itertools라이브러리의 permutations(순열) 함수를 이용하는 것이었다. permutations에 대한 자세한 설명은 밑에 있다. 파이썬을 파이썬답게 - 순열과 조합 - combinations, permut. begin-dev-awos.tis..

article thumbnail
[python] 백준 20044번 Project Teams
알고리즘/백준 2022. 3. 11. 23:59

문제 풀이 첫째 줄에 팀 수(한 팀당 학생 2명) 둘째 줄에 학생들의 코딩 역량 (한 팀당 학생 2명이기에 팀 수 X2 만큼의 역량 개수가 주어진다.) 예제 1에서 1 7 5 8 이 입력으로 들어왔을 때 팀 당 역량이 최대화되기 위해서는 (1, 8), (7,5)로 묶일 수 있다. 그리고 역량의 합이 최소가 되도록 하면 된다. 내가 생각한 방법은 해당 역량을 순서 없이 받아왔다고 가정하면 sorted()로 오름차순 정렬을 시켜준 후 투 포인터를 이용하여 범위를 좁혀 가며 구하는 방식이다. ex) 역량으로 1 7 3 5 9 2가 들어오면 오름차순 정렬 후 1 2 3 5 7 9 가 된다. 투 포인터를 이용하면 (1, 9), (2, 7), (3, 5) 이렇게 3팀으로 묶이게 된다. 팀들의 역량의 합을 구하면 1..

article thumbnail
정신없는 나날들
일상/일기 2022. 3. 11. 03:24

이번 1학기는 대면 수업이다. 2월 27일 (일) ~ 3월 1일 (화) 오전 강릉(관사)에서 서울(본가)로 짐을 부치고 서울(본가)에서 청주(기숙사)로 짐을 부치며 뭐가 빠진 게 있는지 없는지를 철저하게 챙겼다. 또한 기숙사에 제출할 서류들이 있었는데 신속항원검사 1매, 결핵 증명서 1매, 접종확인서 1매. 총 3장의 증명서가 필요했다. 27, 1일이 휴일이라 28일에 알아보고 있었는데 병원마다 진료비가 다르고 당일출력이 되는 곳도 있고 안 되는 곳도 있다고 해서 아파트 커뮤니티에 묻고 물어 검사비만 받고 당일 출력이 되는 김상곤 내과의원에서 신속항원검사와 결핵검사를 받아 증명서를 떼왔다. 신속항원검사 비용은 대략 5000, 결핵검사 비용은 2000원가량. 카드 내역에 7500원가량이 찍혔다. 김상곤내과..

article thumbnail
1일 1커밋(GitHub) 8달째 후기
일상/일기 2022. 3. 10. 23:17

이전과 달라진 점은 요즘은 주로 실버 문제들을 풀고 있다. 약간 생각을 해야 되는 부분 comprehension을 자유롭게 사용할 수 있는 그런 정도의 실버 문제들을 풀려고 노력하고 있다. 또한 알고리즘이나 자료구조의 실력을 늘리기 위해 "파이썬 알고리즘 인터뷰" 라는 책을 보고 있다. 해당 책을 보면서 내가 지금까지 몰랐던 부분이나 얕게 알고 있으면서 그냥 지나갔던 부분, 새로운 지식들을 얻게 되었다. 생각보다 많은 부분이 잘못되었고 지금이라도 바로 잡게 될 수 있어서 다행이다라고 생각이 된다. 또한 지난 여름방학의 학습 욕구를 되찾기 위해 "습관의 재발견"이라는 책을 다시 읽게 됨으로써 공감하는 부분과 자기 의지에 대해 다시 생각해보게 되었다. 나는 강제성이 필요한 사람이다. 이번 학기가 대면인 것에..

article thumbnail
[python] 백준 8892번 팰린드롬
알고리즘/백준 2022. 3. 10. 20:09

문제 풀이 내가 생각한 방법은 itertools라이브러리의 permutations(순열) 함수를 이용하는 것이었다. permutations에 대한 자세한 설명은 밑에 있다. 파이썬을 파이썬답게 - 순열과 조합 - combinations, permutations 본 강의는 파이썬 문법을 이미 알고 있는 분들을 대상으로 만들어졌습니다. ##### 이런 분들께 추천합니다 * 파이썬 문법을 알고 계시는 분 * 알고리즘 문제를 조금 더 쉽게 풀고 싶은 분 * Python 코 programmers.co.kr 간단히 요약하자면 aaba, ba, ababa, bbaa, baaba 총 5개의 단어가 입력으로 들어왔을 때 1. 5개의 단어 중에서 2개 단어를 합친다. 2. 합친 단어들 중에 *팰린드롬 단어를 찾는다. *팰..

article thumbnail
[python] 백준 17219번 비밀번호 찾기
알고리즘/백준 2022. 3. 9. 23:13

문제 풀이 간단하게 dictionary로 풀 수 있다. 첫째 줄에 사이트 주소의 수와 비밀번호를 찾으려는 사이트 주소의 수가 공백을 두고 주어진다. 두번째 줄부터 17번째 줄까지는 저장된 주소와 해당 주소에 저장된 비밀번호가 주어진다. 18번째 줄부터 마지막번째 줄까지는 비밀번호를 찾으려는 사이트의 주소가 주어진다. 내가 생각한 방법은 딕셔너리를 이용하는 것이다. key값으로 주소 value값으로 비밀번호를 넣어 dictionary를 만들어주고 키값에 비밀번호를 찾으려는 사이트의 주소가 들어오면 그에 맞는 value값을 반환해주면 된다. 완성된 코드!!👍😊 import sys N, M = map(int, input().split()) address_dict = dict() for _ in range(N)..

article thumbnail
[python] 백준 10867번 중복 빼고 정렬하기
알고리즘/백준 2022. 3. 8. 23:57

문제 풀이 문제 출력 조건에서 같은 수는 한 번만 출력한다고 되어있기 때문에 set()으로 중복된 수들을 걸러주면 되겠다 싶었다. 또한 오름차순으로 정렬한 결과를 출력해야 되기 때문에 sorted()로 오름차순 정렬을 해주었다. 값만 출력해야 되기 때문에 빈 문자열을 하나 만들고 정렬된 리스트의 값들을 하나씩 넣어주는데 마땅한 방법이 생각나지 않아 f-string방식으로 값뒤에 공백을 하나 만들어 빈 문자열에 이어 붙이도록 했다. 마지막으로 strip()으로 불필요한 공백이 있으면 지워주도록 했다. 완성된 코드!!👍😊 num_count = int(input()) rs = '' for val in sorted(set(map(int, input().split()))): rs += f'{str(val)} ' ..

article thumbnail
[python] 백준 1312번 소수
알고리즘/백준 2022. 3. 7. 23:49

문제 풀이 해당 문제를 수학으로 접근하지 않고 나눈 다음 문자열로 생각하여 풀다 보니 IndexError와 틀렸습니다만 주구장창 떴다. 반례를 고려했다. 아래는 처음 짰던 코드다. 25, 7, 5 가 입력되었을 때 25/7의 결과가 str() 함수에 의해 문자열로 바뀌고 해당 문자열을 ' . ' 으로 구분하면 몫과 소수 부분으로 나뉘게 된다. 25/7을 했을 때 3.5714285... 을 split(' . ')을 해주면 3과 5714285... 두 문자열로 나뉜다. 뒤에 인덱스를 붙여주면 list 형태가 되어 인덱싱을 했을 때 해당 5714285... 이 부분만 가져올 수 있다고 생각하여 풀었다. a, b, n = map(int, input().split()) # 25/7 = 3.5714285... ->..

article thumbnail
[python] 백준 1934번 최소공배수
알고리즘/백준 2022. 3. 6. 23:37

문제 풀이 python의 내장 라이브러리 중 math 라이브러리에는 최대공약수를 구할 수 있는 함수들이 들어있다. from math import gcd 위와 같이 한 줄이면 최대공약수를 구할 수 있는 함수를 불러와 쓸 수 있다. 최대공약수와 최소공배수는 밀접한 관계를 갖고 있다. 최대공약수를 구하면 최소공배수는 덤으로 구할 수 있다. 입력으로 들어온 두 수의 곱에서 두 수의 최대공약수로 나누면 그게 최소공배수이다. 완성된 코드!!👍😊 from math import gcd def lcm(x, y): return x * y // gcd(x, y) t = int(input()) for _ in range(t): A, B = map(int, input().split()) print(lcm(A, B))

article thumbnail
[python] 백준 11399번 ATM
알고리즘/백준 2022. 3. 3. 23:55

문제 풀이 n명의 사람들이 돈을 인출하는 데 걸리는 시간이 주어지고 n-1번 사람이 돈을 뽑을 때까지 n번 사람은 기다려야 해서 기다리는 시간(n-1번 사람이 돈을 뽑는 시간)까지 계산해줘야 한다. 예제 1을 아래의 그림과 같이 보면 첫째 줄에 5 (사람 인원수)가 주어지고 둘째 줄에 3 1 4 3 2 (각 사람마다 인출하는데 필요한 시간)이 주어진다. times라는 배열에 3 1 4 3 2를 담고 rs(배열)에 이전 사람이 돈을 뽑을 때까지 기다리는 시간과 본인이 인출하는데 시간을 누적하여 각 rs(배열)에 담아주면 된다. 예제에서는 5명이 있기 때문에 rs(배열)에도 5개의 값이 있을 것이다. 설명을 하기 위해서 rs(배열)을 썼지만 그냥 tot과 같은 변수 하나에 값을 누적시켜주면 된다. 하지만 여..

article thumbnail
[python] 백준 13699번 점화식
알고리즘/백준 2022. 3. 2. 23:15

문제 풀이 문제를 가만히 보면 규칙이 있다는 걸 알 수 있다. 그림을 보면 반복문이 쓰인다는 것을 알아챌 수 있다. n의 범위가 0 ≤ n ≤ 35 이므로 미리 t(0)부터 t(35)까지의 값들을 구한다. 다 구하는 이유는 예를 들어 t(0)과 t(1)의 값만 있다고 생각하면 t(3)을 구하기 위해서는 t(2)의 값을 알아야 하는데 t(2)의 값이 구해지지 않았기 때문에 일단 미리 순차적으로 t(0)부터 t(35)까지의 값들을 다 구해놓은 후 입력값이 어떤 숫자(n)가 들어왔는지에 따라 해당 t(n)을 반환해주면 된다. 글이 이해가 안된다면 그림을 보면 좀 더 이해하기 쉬울 것이다. 완성된 코드!!👍😊 n = int(input()) # t(0) = 1 t = [1] # n의 범위가 0부터 35까지이나 t..

article thumbnail
[python] 백준 2729번 이진수 덧셈
알고리즘/백준 2022. 3. 1. 21:28

문제 풀이 간단하게 두 문자열을 받아 해당 문자를 정수로 바꿔준다. 바뀐 두 정수의 합을 구해 bin() 함수로 감싸주면 0b~~~~ 로 시작하는 이진수가 출력이 되는데 해당 0b를 잘라주어 출력해주면 된다. 완성된 코드!!😊👍 t = int(input()) for _ in range(t): n1, n2 = input().split() print(bin(int(n1, 2) + int(n2, 2))[2:])