망나니 AWOS의 일상
article thumbnail
[python] 백준 20362번 유니대전 퀴즈쇼
알고리즘/백준 2021. 9. 5. 02:34

문제 요약 및 풀이 N개의 채팅 기록 중에 정답자 S의 채팅 내용과 같은 채팅 내용들을 찾으면 된다. 내가 생각한 풀이는 이렇다. 1. 딕셔너리를 만들어서 dict[name] = chat 로 한 쌍을 이루어서 저장 2. 해당 dict[S]를 정답 answer에 대입하여 for문을 돌려 answer와 같은 채팅 내용을 가진 사람들을 카운팅 3. dict[S]가 아닌 사람들을 카운팅 해야 되기 때문에 if문으로 break 예제 입력 1을 예로 들면 N = 3, S = duck일 때 N name chat answer cnt 출력 1 oridya hello 2 orihehe hi hi 1 1 3 duck hi hi 2 표 이해가 안될 수도 있을 텐데... 그 부분은 풀이 1, 2, 3을 참조하면 될 것 같다. ..

article thumbnail
[python] 백준 11179번 2진수 뒤집기
알고리즘/백준 2021. 9. 2. 15:25

문제 요약 및 풀이 정수 N -> 13을 입력받아서 2진수로 바꾼 후 2진수를 뒤집어서 그거를 다시 정수로 만들면 된다. 예제 입력 1을 예로 보여주자면 N 2진수로 변환 2진수 reverse 바뀐 N 13 1101 1011 11 위의 표처럼 출력이 나오게 된다. 정수로 입력을 받는데 이진수로 받고, 0b~~~ 이런 식으로 나온 이진수의 앞의 '0b'를 제거해서 숫자만 나오도록 한다. 제거한 숫자(문자열)을 reverse로 순서를 뒤집어주고 0b를 다시 붙여준 후에 10진수로 만들어주면 된다. 아래와 같은 코드로 마무리 짓겠다. 완성된 코드!! 👍😊 s_N = bin(int(input())).replace("0b", "") arr_list = '0b'+''.join(list(reversed(s_N))) ..

article thumbnail
[python] 백준 4948번 베르트랑 공준
알고리즘/백준 2021. 9. 1. 22:00

해당 문제는 1929번의 소수 구하기 문제와 유사하므로 풀이 과정은 생략하겠다. [python] 백준 1929번 소수 구하기 문제 요약 및 풀이 M이상 N이하의 소수를 모두 출력 이 문제 같은 경우 1부터 ~ 1,000,000까지 소수인지 아닌지 일일이 검사한다면 시간 초과가 걸리게 될 것이다. 그렇기에 에라토스테네스의 체라 begin-dev-awos.tistory.com 코드!!👌👌 n = 123456*2 # 0, 1 = False, 소수는 2부터 시작이므로 True 로 설정 a = [False, False] + [True] * (n - 1) primes = [] for i in range(2, n + 1): if a[i]: primes.append(i) for j in range(2 * i, n + ..

article thumbnail
[python] 백준 1929번 소수 구하기
알고리즘/백준 2021. 8. 31. 21:53

문제 요약 및 풀이 M이상 N이하의 소수를 모두 출력 이 문제 같은 경우 1부터 ~ 1,000,000까지 소수인지 아닌지 일일이 검사한다면 시간 초과가 걸리게 될 것이다. 그렇기에 에라토스테네스의 체라는 알고리즘을 쓸 예정이다. 밑의 gif 파일을 보자. 이 gif 파일을 보면 2부터 120사이의 소수를 구하는데 2의 배수, 3의 배수... N의 배수를 검사하는 것을 볼 수 있다. 해당 배수들을 제거하게 되면 소수를 찾을 수 있다. '에라토스테네스의 체'의 시간복잡도는 O(Nlog(logN))이다. 일단 M과 N의 제한은 (1 ≤ M ≤ N ≤ 1,000,000) 이기 때문에 1부터 1,000,000까지의 소수를 미리 구해놓고 M과 N사이의 소수를 반환시켜줄 것이다. N의 배수를 제거해야 되기 때문에 b..

article thumbnail
[python] 백준 1834번 나머지와 몫이 같은 수
알고리즘 2021. 8. 30. 21:20

문제 요약 및 풀이 어떤 자연수(K)를 N으로 나누었을 때 나머지와 몫이 같은 자연수의 합을 구해라. K % 3이라면 몫이 1이고 -- 나머지가 1인 4와, 몫이 2이고 -- 나머지가 2인 8이 나올 것이다. 두 자연수의 합은 12가 된다. 잘 이해가 안 되면 아래의 표로 설명하겠다. K % N 몫 나머지 K K의 배수 K % 2 1 1 3 3 K % 3 1 1 4 4 2 2 8 K % 4 1 1 5 5 2 2 10 3 3 15 K % 5 1 1 6 6 2 2 12 3 3 18 4 4 24 K % 6 1 1 7 7 2 2 14 3 3 21 4 4 28 5 5 35 위의 표처럼 나타내면 규칙이 보인다. 몫과 나머지는 1부터 N-1까지이고 K를 N으로 나누었을 때 K는 N+1의 배수인걸 알 수 있다. N이 ..

article thumbnail
[python] 백준 1158번 요세푸스 문제
알고리즘/백준 2021. 8. 28. 23:44

문제 요약 및 풀이 입력이 7 3일 때 (1 2 3 4 5 6 7) 번까지 총 7명의 사람이 원을 이루고 있게 되고 3번째 사람을 제거하게 되는데 표로 보여주겠다. 리스트를 이용해서 풀면 되겠다 싶었다. 배열의 index값은 0번째부터 시작이니 k=3이라면 list[2]라고 생각하면 된다. K번째 사람이 제거 될때마다 리스트의 사이즈가 하나씩 줄어드는 걸 볼 수 있다. 1 2 3 4 5 6 7 [0] [1] [2] [3] [4] [5] [6] 3 1 2 4 5 6 7 [0] [1] [2] [3] [4] [5] 6 1 2 4 5 7 [0] [1] [2] [3] [4] 2 1 4 5 7 [0] [1] [2] [3] 7 1 4 5 [0] [1] [2] 5 1 4 [0] [1] 1 4 [0] 4 빨간색만을 보면..

article thumbnail
[python] 백준 1212번 8진수 2진수
알고리즘/백준 2021. 8. 26. 23:23

문제 요약 및 풀이 8진수를 2진수로 변환하여 출력 8진수를 10진수로 바꾸어 2진수로 변환하면 되겠다 싶어 아래와 같이 구현 입력을 받을 때 8진수로 입력받아 10진수로 변환하도록 하였다. int(input(), 8) bin메서드를 이용하면 10진수를 2진수로 변환하게 되는데 '0b'가 앞에 붙게돼서 슬라이싱을 통해 해당 문자열을 잘라 2진수 만을 출력토록 하였다. 완성된 코드!! 👍😊 octa_n = int(input(), 8) print(bin(octa_n)[2:])

article thumbnail
[python] 백준 1547번 공
알고리즘/백준 2021. 8. 25. 13:19

문제 요약 및 풀이 컵의 위치를 바꾼 횟수 M 컵의 위치 X -> Y 가 M번만큼 주어진다. 최종 몇 번째 컵에 공이 있는지 확인 아래의 표를 가지고 설명을 하겠다. 컵 1, 2, 3은 공의 위치를 표시하려고 썼다. 횟수 : M 싸이클 입력 : X Y 공이 있는 위치 컵 : 1 컵 : 2 컵 : 3 4 1 3 1 3 O 2 2 3 2 O 3 3 1 2 O 4 3 2 3 O cf) 싸이클 3에서는 위치가 그대로이기 때문에 변함이 없다. map으로 여러 개의 입력을 받도록 처리하고 공의 위치를 swap을 하도록 하였다. 완성된 코드!! 😊👍 M = int(input()) cup = [1, 0, 0] for i in range(M): x, y = map(int, input().split()) cup[x - 1..

article thumbnail
[python] 백준 1085번 직사각형에서 탈출
알고리즘/백준 2021. 8. 24. 20:30

문제 요약 및 풀이 직사각형의 경계선까지 가는 거리의 최솟값을 구하라. 직사각형의 좌표 값이 0, 0과 w, h가 주어지는데 예제 입력 1을 예로 들면 0, 0 ------- 10, 3이 주어지고 한수라는 애가 6, 2 지점에 있다고 생각하면 그림은 이렇게 그려진다. (오른쪽만 보면 된다) 이 그림을 가지고 설명을 하자면 한수의 좌표를 중심으로 보면 상하좌우의 최솟값 중에 가장 작은 값이 직사각형의 경계선까지 가는 거리의 최솟값이라고 볼 수 있다. 값만 뽑아보자면, 1 2 4 6 이 되는데 이 값들을 식으로 표현하자면 밑의 표처럼 된다. 1 h-y 2 y-0 = y 4 w-x 6 x-0 = x 그중 최솟값인 1이 결과값으로 출력이 되는 것이다. python에서 최솟값을 뽑아낼 수 있는 min()이라는 메..

article thumbnail
[python] 백준 2490번 윷놀이
알고리즘/백준 2021. 8. 23. 22:48

문제 요약 및 풀이 표 하나로 설명을 하겠다. 도 개 걸 윷 모 배(0) 배(0) 배(0) 배(0) 등(1) 등(1) 배(0) 배(0) 배(0) 등(1) 등(1) 등(1) 배(0) 배(0) 등(1) 등(1) 등(1) 등(1) 배(0) 등(1) 0111 0011 0001 0000 1111 0의 개수 : 1 0의 개수 : 2 0의 개수 : 3 0의 개수 : 4 1의 개수 : 4 도, 개, 걸, 윷 같은 경우 0의 개수를 카운팅 해주면 되고 모 같은 경우는 1의 개수를 카운팅 해주면 된다. 딕셔너리를 안 써도 되지만 써서 해봤다. 입력값을 공백을 기준으로 분리하여야 하기 때문에 input().split()으로 입력을 받았다. 나머지는 표의 개수란과 같이 if문을 돌려서 해주었기 때문에 표를 참고하면 될 것 같..

article thumbnail
파이썬 챌린지 후기 (8.31 추가)

뭔가 바쁘다는 핑계로 파이썬 챌린지 글을 올리지 않았는데 오늘 통틀어서 얘기해보려 한다. (두서없이 적습니다) 일단 최종 졸업과제까지 냈다. 파이썬 챌린지를 시작하기 전 슬랙에 요런 질문을 올렸었는데 ㅋㅋㅋ 그 당시 웹스크래퍼 강의 예습조차 하지 않은 순백의 상태 ㅎㅎㅎ 솔직히 1주차 때까지는 할만하다 여서 글 올리고 TIL까지 작성했었는데 2주차부터 난이도가 올라갔달까 챌린지에 투자하는 시간이 많아지기 시작... 글 포스팅은 고사하고 1일 1커밋도 위협을 받는데... 다행히도 2주차 중반부터 파이널 과제까지 48시간을 주셔서 조금 널널해지면서 운동도 종종 나가고 1일 1커밋도 지켜냈다. ㅎㅎ . . . ( 제 입장에서 설명을 하도록 하겠습니다. ) 난이도 자기가 하고자 하는 의지만 있으면 문제 없다고 ..

article thumbnail
[python] 백준 1284번 집 주소
알고리즘/백준 2021. 8. 21. 12:10

문제 요약 숫자가 차지하는 길이와 좌, 우 여백의 길이 및 숫자 하나하나의 간격의 길이를 구해야 한다. 0일 때 차지하는 길이는 4, 1이 차지하는 길이는 2, 2~9가 차지하는 길이는 3이다. 문제 풀이 예제 입력 1에서 120을 예시로 들어줬는데 좌, 우 여백의 길이를 총 2로 생각하고, 120이라는 수이지만 쪼개면 1 2 0 이 되어 여백의 길이는 2가 되고 숫자 하나하나 차지하고 있는 길이를 구하면 1은 2, 2는 3, 0은 4가 나와서 1+2+1+3+1+4+1 = 13이 된다. 설명이 어려웠다면 밑에 사진을 첨부해놨으니 참고하길 바란다. N을 입력받아 문자 0과 같다면 종료 문자열 N을 for문을 돌려 각 자리를 분리. 그 분리한 문자들을 배열에 넣어준다. tot변수(총길이)를 만들어주고 배열의..

article thumbnail
파이썬 챌린지 10일차 및 느끼는점...

어제부터 48시간이 주어졌었는데... 생각보다 빨리 끝났다. 시간이 많이 주어져서 그런지 결과물보다 예외처리라든지 조금 더 추가했다. 시간을 많이 준 데에는 이유가 있을 거라고 보기 때문 ㅋㅋㅋ 과제 제출 기한이 끝나자마자 정답과 새로운 과제가 올라오는데... 놀랍다. 그리고 코드를 보고 '아 파이썬에서는 이런 식으로 쓸 수 있구나'를 많이 느낀다... 그리고 강의보다는 챌린지에서 얻어가는 것이 더 많은 것 같다. 강의가 비싼데는 이유가 있다는 게 생각이 든다. 아직 딕셔너리와 리스트를 쓰는데 헷갈리는 부분이 있지만... 리스트안에 딕셔너리가 들어가는 경우도 있고 딕셔너리 안에 리스트가 들어가는 경우도 있고 가끔 스크래핑하다 보면 {}, [] 헷갈려서 type 오류가 무지하게 나는 경향이 있다 ㅋㅋㅋㅋㅋ..

article thumbnail
파이썬 챌린지 9일차 및 TIL

현재 9일차 ~ 10일차 과제가 합쳐져서 총 48시간이 주어졌다... 목요일 오전 6시까지 제출... 9일차 및 10일차로 글을 올릴까 했으나 TIL은 오늘 작성했기 때문에 TIL을 올려본다. https://github.com/A-WOS/TIL/blob/main/python_web_scrapper/2021-08-17.md GitHub - A-WOS/TIL: Today I Learned Today I Learned. Contribute to A-WOS/TIL development by creating an account on GitHub. github.com

article thumbnail
파이썬 챌린지 8일차 및 TIL

어제 그나마 휴일이라서 진짜 푹 쉬었다. 챌린지 시작한 이후 날이 갈수록 어려워지는 문제에 문제 푸는 시간이 무려 1시간씩 점핑되는 일이 발생... 거기다 예외는 어떻게 처리해야할지도 모르겠고... 오늘도 무려 9시간이라는 시간을 잡고... 있었다... 블로그에 글 쓸 시간도 없다... 내일은 뭐가 나올지 기대보다는 걱정이 좀 더 앞선달까... 쉽지 않다... 오늘 오전 6시에 메일로 175명이 살아남았다고 하는데... 끝까지 살아남아서 가능할런지... GitHub - A-WOS/TIL: Today I Learned Today I Learned. Contribute to A-WOS/TIL development by creating an account on GitHub. github.com

article thumbnail
[python] 백준 2576번 홀수
알고리즘/백준 2021. 8. 15. 19:58

문제 요약 자연수 7개 input, 그중 홀수를 찾고 그 홀수들의 합을 첫째줄에, 그 홀수들 중 가장 작은 값을 둘째 줄에 만약 자연수 7개를 입력받았는데 홀수가 존재하지 않는 경우에는 -1을 출력 문제풀이 홀수 같은 경우 % 연산자로 쉽게 구할 수 있다. N % 2 == 1 -> N을 2로 나누었을 때 나머지가 1일 때, 즉 3을 2로 나누었을 때 나머지 1, 홀수 일 때를 말한다. 반대로 N % 2==0 일때 짝수이게 되는 것이다. 1. list를 만들어 홀수 일 때만 list에 값을 넣어줌 2. 해당 list에 있는 값들의 합(sum)을 구하고, list 안의 값 중 최솟값(min)을 출력 3. list의 길이가 0이 아닐 때 2번을 수행하고 아니면 -1을 출력 완성 코드! 👍😊 java를 주로 많..