망나니 AWOS의 일상
article thumbnail
[python] 백준 5568번 카드 놓기
알고리즘/백준 2022. 2. 28. 22:46

문제 풀이 예제 1을 보면 첫째 줄에 카드의 총 개수(4장), 둘째 줄에 총 카드 중 몇 장(2장)을 뽑을지 셋째 줄부터 마지막째 줄까지 4장의 카드의 숫자를 입력 (1, 1, 2, 12) 받는다. 무작위로 2장씩 짝지어 보면 아래의 그림과 같이 된다. 조합은 총 12개지만 중복되는 수가 있으므로 제외하면 7개라는 결괏값이 나온다. python에서는 itertools 라이브러리에 내장되어 있는 permutations 함수가 있다. 이 permutations 함수는 위의 문제처럼 순열을 구할 때 잘 쓰이는 함수이다. 때문에 꼭 import를 해줘서 사용해야 한다. 05-05 itertools.permutations - 순열 `itertools.permutations(iterable, r=None)` 함수는..

article thumbnail
[python] 백준 1120번 문자열
알고리즘/백준 2022. 2. 27. 22:41

문제 풀이 문제 조건을 보면 A의 길이는 B의 길이보다 작다. A와 B의 길이가 같을 경우 B의 문자열 중에 A의 문자열 중에 어느 문자가 다른지를 판별해주어 개수를 세주면된다. 아래의 그림을 보면 A에 hello, B에 xello가 들어왔을때 for문을 돌려 각각의 요소들이 같은지 다른지를 판별해 개수를 세서 리턴해주면 된다. A와 B의 길이가 다를 경우 방법은 같은 경우의 방법과 유사하다. 아래의 그림을 보면 A에 abc, B에 topabcoder가 들어왔을때 해당 B의 문자열을 abc로 비교할 수 있는 횟수는 총 8번이다. B의 문자열들을 인덱스 값을 하나씩 증가시켜가며 대조하는 것으로 보면 된다. 총 8번을 비교하여 그 중 최소를 출력해주면 된다. 완성된 코드!!👍😊 def same_len(a, ..

article thumbnail
강릉에서의 마지막 밤
일상/일기 2022. 2. 26. 23:42

21년 7월 19일 즈음 아버지께서 강릉경찰서로 발령이 나시게 되었다. 마침 여름방학이기도 하고 좀 살다가 3학년 2학기 학교에서 대면을 하게 되면 내려갈까 생각 중이었다. 하지만 코로나가 극심해 비대면을 하게 되어 현재 겨울방학까지 강릉에서 살게 되었다. 주변에서 "아버지랑 둘이서 살면 불편하지 않냐?" 라고들 많이 하시는데 이전부터 난 아버지랑 관계가 좋았었고 내가 대부분의 살림살이들은 할 줄 알았다. 빨래야뭐 세탁기가 해주고 국이야 인터넷 검색해서 레시피 보면 되었다. 청소? 둘이서 살다보니 청소기는 일주일에 한 번이나 2주에 한번 정도 돌리고 걸레질은 2주에 한번 정도 했던 것 같다. 주로 아버지께선 비상상황 아니면 회사가셔서 드신다. 학교에서 대면수업을 적극 권장하고 있어서 본가에 들러 기숙사로..

article thumbnail
[python] 백준 7120번 String
알고리즘/백준 2022. 2. 21. 23:42

문제 풀이 글보다는 그림을 보고 설명을 하는 게 나을 것 같다. 입력으로 들어온 문자열 ppppppiaanooooo 가 있을 때 해당 문자열을 리스트에 담아 문자 하나하나를 원소로 갖는다. i번째 문자가 다음 순서인 i+1번째 문자와 같지 않을때만 추가해주면 된다. (0번째 문자와 1번째 문자가 같지 않으면 된다.) 하지만 예시 그대로 코드를 짜면 위의 그림과 같이 pian이라고 출력이 된다. 그래서 해당 문자열 첫번째 문자(p)를 먼저 빼두고 i번째 문자와 i+1번째의 문자가 같지 않을 때의 조건에서 i+1번째의 문자를 이어 붙여주면 piano라는 글자가 나오게 된다. 완성된 코드!!😊👍 s = list(input()) rs = s[0] for i in range(len(s)-1): if s[i] !=..

article thumbnail
2월 20일 운동
일상/일기 2022. 2. 20. 21:46

오늘 운동 루틴은 팔굽 (15 15 15) 45개 걷기 9.98km (기록상) 2월이 끝나가며 날이 점점 풀리는 추세다. 강릉은 겨울에 대체적으로 따뜻하다. 하지만 바닷바람 때문에 바람이 불면 상당히 춥다. 해를 보는건 참 오랜만이다. 밤이 되니 바람이 좀 분다. 운동을 하니 운동 전보다는 춥지 않아서 좋았다. 곧 개강이고 대면 수업을 한다 하여 강릉을 떠날 것 같아 사진을 좀 찍어봤다.

article thumbnail
[python] 백준 16499번 동일한 단어 그룹화하기
알고리즘/백준 2022. 2. 20. 00:08

문제 풀이 내가 생각한 방법은 이렇다. 단어들을 리스트로 받아 리스트의 원소(문자)들을 정렬하고 정렬된 문자들을 이어 붙여 하나의 단어로 만든 후에 그 문자들이 새로운 리스트에 담는데 만약에 새로운 리스트에 해당 문자가 없을때만 담으면 그룹을 출력할 수 있을 것 같았다. 글이 이해가 안되면 그림을 하나 보자. 예제 입력 1이다. 주어진 단어들이 총 4개인데 리스트로 만들어 정렬한 후 리스트의 원소들을 이어 붙여 하나의 새로운 단어로 만든 것이다. 만들어진 단어들을 새로운 리스트에 순차대로 넣어 만약에 해당 단어가 새로운 리스트에 없을 때에만 추가해주면 된다. 그렇게 하면 해당 그룹은 2개( act와 dgo )로 나뉘어진다. 완성된 코드!!👍😊 n = int(input()) word_list = list(..

article thumbnail
1일 1커밋(GitHub) 7달째 후기
일상/일기 2022. 2. 19. 04:12

생각보다 알고리즘 문제를 풀 때 시간 복잡도를 생각하며 풀게 되었다. 리스트로 구현했을 때와 집합으로 구현했을 때의 차이를 생각하며 풀게 되었다. 1일 1커밋 7달이 넘었는데 하루라도 안 하면 불안하다. 그리고 내 잔디가 꺾이지 않았으면 하는 점도 있다. 전에 commit을 되돌리다가 rebase를 잘못 써서 어떤 시점으로 돌아가버려 잔디가 통째로 사라질뻔한 적도 있다. 정말 위험천만한 순간들이 있었는데 구글신께서 도와주셔서 다시 복구했다. 밀린 알고리즘 풀이를 좀 써보려한다. 대략 10개 이상 밀린 것 같은데... 인과응보랄까... . . . 지난 6달째 후기 부터 글을 늦게 올렸는데... 솔직히 말하자면 많이 게을러졌다. 춥다는 핑계로 운동을 안 하다 보니 먹는 대로 살이 쪘다. 잦은 외식도 체중 증..

article thumbnail
2월 4일 운동
일상/일기 2022. 2. 4. 23:53

오늘 운동 루틴은 팔굽 (15 15 15) 45개 윗몸일으키기 (15 15 15) 45개 걷기 5.51km (기록상) 추워서 그런지 사람이 한 명도 없다. 공기계인 S20+를 워치와 연동시키고 기록을 해본 결과이다. 추석명절 이후로 거의 4달 반 만에 운동 글을 올려보는 것 같다. 가끔씩 등산을 하기도 했는데 거의 드물다. 날이 추워져서 나가기는 더욱 싫었던 것 같기도 하다. 운동을 안 하다 보니 살이 찌고 뭔가 정신이 붕 떠있는 듯한 느낌이 많이 들어서 춥더라도 좀 나가봤다. 2km 정도 달릴까도 싶었지만 오랜만에 운동하는 거라 그냥 걷기만 했다. 최소 점심 먹고 2~3시쯤에는 나가서 운동을 해야겠다는 생각을 했다. 바닷바람이 한몫해서 날씨 온도는 -1도이지만 체감온도는 -6도인걸 운동하고 들어와서 알..

article thumbnail
[python] 백준 1269번 대칭 차집합
알고리즘/백준 2022. 2. 4. 23:32

문제 풀이 집합 같은 경우 set() 함수를 이용하면 쉽게 풀 수 있다. set() 함수는 중복을 허용하지 않으므로 수식으로 나타내 보면 아래의 수식처럼 나타낼 수 있다. A U B - (A ∩ B) 합집합 같은경우 union 함수, 교집합 같은 경우 intersection 함수를 사용하면 된다. 완성된 코드!!👍😊 n, m = map(int, input().split()) A = set(map(int, input().split())) B = set(map(int, input().split())) print(len(A.union(B) - A.intersection(B)))

article thumbnail
[python] 백준 1764번 듣보잡
알고리즘/백준 2022. 2. 1. 14:12

문제 풀이 간단하게 생각하면 듣도 못한 사람들과 보도 못한 사람들의 교집합을 구하면 되는 문제이다. 합쳐서 듣보잡의 수와 해당하는 사람들을 출력하면 되는 것이다. 예제 입력1에서 듣도 보도 못한 사람들의 교집합에는 ohhennrie baesangwook 두 사람이 있기 때문에 출력의 결과가 이렇다. 여기서 생각한 방법은 set함수를 이용하는 것이었다. list도 있겠지만 입력에서 보면 N, M은 500,000 이하의 자연수 즉 입력을 N, M 합쳐 백만 번 정도를 돌린다는 소리인데... 분명 시간초과가 날것이기 때문에 list보다는 set을 이용하게 되었다. 집합을 만들어주고 해당 교집합을 구하여 출력할 때 사전 순으로 출력하라고 했기 때문에 정렬 함수인 sorted를 이용해주면 된다. 완성된 코드!!👌..

article thumbnail
[python] 백준 1439번 뒤집기
알고리즘/백준 2022. 1. 31. 21:53

문제 풀이 문자열 S를 입력받아서 모든 문자를 1로 만들 때 최소한의 뒤집기 횟수를 출력해야 한다. 예제 입력 4를 보면 11001100110011000001 인데 연속된 0만 보자면 00, 00, 00, 00000 총 4개가 있고 연속된 1만 보자면 11, 11, 11, 11, 1 총 5개가 있는 것을 볼 수 있다. 여기서 생각한 방법은 split함수를 쓰는 것이었다. 문자열 S를 입력받고 해당 문자열을 0이나 1을 구분자로 두면 쉽게 풀 수 있을 것 같았다. s1 = s.split('0') s2 = s.split('1') 위와 같이 각각 0과 1로 구분하였을 때 결과이다. 배열에 빈 문자열이 있지만 값이 있을 때만 카운트하면 된다. s1은 연속된 0의 개수의 배열이 될 것이고 s2는 연속된 1의 개수..

article thumbnail
[python] 백준 11656번 접미사 배열
알고리즘/백준 2022. 1. 28. 23:42

문제 풀이 문제에서 나와있다시피 baekjoon의 접미사는 총 8개로 되어있다. 해당 문자열의 길이 = 접미사 개수라고 볼 수 있다. 해당 접미사들을 for문을 돌려 리스트에 넣어주면 모든 접미사들을 구할 수 있다. 사전 순이기 때문에 sort함수를 써서 정렬해주면 된다. 완성된 코드!!👌👌 def func(word): l = list() for i in range(len(word)): l.append(word[i:]) l.sort() return l s = input() for val in func(s): print(val)

article thumbnail
[python] 백준 2870번 수학숙제
알고리즘/백준 2022. 1. 27. 23:56

입력 첫 번째 줄 테스트 케이스 수 두 번째 줄부터 문자열 출력 문자열에 대해서 숫자만 뽑아서 비 내림차순으로 출력(비 내림차순에 대해서는 문제 내용에 쓰여있다) 문제풀이 테스트 케이스 수를 입력받고 다음 줄부터는 문자열에서 문자를 제외하고 숫자만 뽑아서 비 내림차순으로 정렬하여 출력해야 하는데 구분한다고 하면 split함수가 생각날 것이다. 하지만 일반적인 split함수로는 문자 하나에 대해서만 구분할 수 있는데 re라이브러리 안에 있는 split함수를 쓰면 구분할 문자가 여러 개여도 구분할 수 있다. re — 정규식 연산 — Python 3.10.2 문서 scanf() 시뮬레이션 파이썬에는 현재 scanf()에 해당하는 것이 없습니다. 정규식은 일반적으로 scanf() 포맷 문자열보다 강력하지만, 더..

article thumbnail
[python] 백준 5217번 쌍의 합
알고리즘/백준 2022. 1. 14. 10:14

입력 첫 번째 줄에는 테스트 케이스 수 두 번째 줄 ~ 네 번째 줄까지 n 출력 n에 대한 순서 쌍 문제 풀이 간단하게 그림을 그리면 사칙 연산으로 순서 쌍을 나눌 수 있다. 순서 쌍을 이루는 수들은 서로 달라야 하기 때문에 4일 때 2 2는 순서 쌍이 되지 않는다. 해당 부분만 주의하면 쉽게 코드를 짤 수 있다. 완성된 코드!!👍 for _ in range(int(input())): x = int(input()) n = x//2 l = [] for i in range(1, n+1): if i < x - i: l.append(f'{i} {x - i}') print(f'Pairs for {x}: ' + ', '.join(val for val in l))

article thumbnail
1일 1커밋(GitHub) 6달째 후기
일상/일기 2022. 1. 10. 05:06

시험이 끝나고 백준 실버 문제들을 풀고 있으나 학창 시절 공부하지 않은 수학에 의해 발목이 잡혔다. 그렇다고 지금 들어 수학을 공부할 순 없으니 그림을 그려가며 규칙성을 찾아보고 이런 규칙들을 구글에 검색하는 등 해결방안을 찾아보고 있다. 몇 달 후에는 4학년 1학기가 시작될 것이고 어찌 보면 내 인생에서 하나뿐이 마지막 대학생활이지 않을까 싶다. 취준생이 된다는 시기이기도 하고 중요한 시기이기도 하다. 요즘 "딥 워크(칼 뉴포트)", "습관의 재발견(스티브 기즈)" 등의 책들을 정독하고 있다. 필자는 책과는 거리가 먼 사람이다. 사실 필요하다고 보면 책을 사서 보지만 필요치 않다고 생각하면 책을 죽어도 보지 않는다는 게 맞을 것 같다. 이러한 책들에서 나에게 적용시킬 수 있을만한 방법들을 배우지 않을까..

article thumbnail
[python] 백준 15233번 Final Score
알고리즘/백준 2022. 1. 2. 18:13

입력 첫 번째 줄에는 A팀 인원수, B팀 인원수, 득점한 선수 인원수 두 번째 줄에는 A팀 선수들의 이름 세 번째 줄에는 B팀 선수들의 이름 네 번째 줄에는 득점한 선수들의 이름 출력 득점한 인원이 더 많은 선수팀 출력, A팀과 B팀의 득점한 인원이 같을 때 "TIE" 출력 문제 풀이 간단하게 득점한 선수가 A팀, B팀에 얼마나 있는지 확인하여 결과값을 출력해주면 된다. 또 중복된 코드가 있어서 함수를 하나 만들어 불필요한 코드를 없앴다. 완성된 코드!!👍 def p_count(p_l): cnt = 0 for val in p_l: cnt += g_p.count(val) return cnt a,b,p = map(int, input().split()) a_p = input().split() b_p = inp..