[백준/14582] 오늘도 졌다 | 야구 | 파이썬 리스트 누적합
·
PS/BOJ&Programmers
문제 이해평소 야구를 즐겨보지 않아서 그런지 초와 말에 대한 개념이 없었다.그래서 처음엔 그냥 i번째에 이기고 있으면 역전패가 성립한다고 코드를 구현했는데 틀린 거다...!질문 게시판을 통해 반례를 찾아보니 출제자가 그래서 문제 마지막에 경기는 1회초 -> 1회말 -> 2회초 -> ... -> 9회초 -> 9회말이라는 설명까지 덧붙인 듯하다.역시 문제를 꼼꼼히 잘 읽는 것도 중요하다. 괜히 써진 문장은 없기 때문에 최대한 힌트를 많이 얻어가는 게 유리하다.  파이썬 리스트 원소 누적합 게임은 현재까지 얻었던 점수들의 합으로 판단을 하기 때문에, 누적합을 구해서 승부를 판단했다.a = list(map(int, input().split()))b = list(map(int, input().split()))fl..
[백준/6996] 애너그램.. 반례찾기
·
PS/BOJ&Programmers
🔎 처음시도 n = int(input())for _ in range(n): a, b = input().split() cnt = 0 for i in a: if i in b: cnt += 1 if cnt == len(a) and len(a) == len(b): print('{} & {} are anagrams.'.format(a,b)) else: print('{} & {} are NOT anagrams.'.format(a,b))반례: aaaa aaab. 이유: if i n b 코드에서 변수 a와 변수 b가 가진 a의 개수에 상관없이, 포함되어있는지 아닌지만 판단했기 때문에, 오류 발생..그래서 a,b 서로서로 검사..
[백준/1159] 농구경기
·
PS/BOJ&Programmers
문제 이해첫글자를 key값으로 넣고, 다음 입력값의 첫글자가 이미 딕셔너리 key로 저장되어 있다면 +1 해주는 로직이 떠올랐다. 첫번째 시도 _ 실패n = int(input())d = {}for i in range(n): name = input() key = name[0] # 만약 이미 d에 key 값이 존재하는 경우 if d.get(key): d[key] += 1 else: d[key] = 1 ans = list(d.values()) for i in ans: if i >= 5: for k,v in d.items(): print(k) 첫번째 시도 모든 key 값을 출력해버림. items 함수를..
[백준/2609] 최대공약수와 최소공배수| 유클리드 호제법 | 확장 유클리드 알고리즘
·
PS/BOJ&Programmers
유클리드호제법(최대공약수와 최소공배수)두 양의 정수, 혹은 두 다항식의 최대공약수를 구하는 방법이다. 호 호제법: '서로 나눈다'라는 뜻.일반적으로 최대공약수를 구할 때 소인수분해를 하고 두 수의 공통인 소인수를 곱한다. 이 방법은 수가 커질수록 소인수분해하기 어려워진다는 단점이 있다. 이를 극복하기 위한 방법이 유클리드 호제법이다. 그렇다면, 유클리드 알고리즘을 어떻게 구현할 수 있을까?바로 mod 연산(나머지 구하기 : %)을 반복하는 방법이다. why mod p?답이 큰 정수인 경우, Overflow 에러를 막기 위해서 문제에서 큰 소수(보통 1,000,000,007)로 나눈 나머지를 요구자연수 a, b에 대해 a를 b로 나눈 나머지는 r이다. (단 a>b) r에 대해, b를 r로 나눈 나머지 r'..
[백준/1929] 소수 구하기 | 에라토스테네스의 체
·
PS/BOJ&Programmers
개요백준 소수 문제들이 눈에 들어와서 푸는데,, 이 문제만 같은 방식으로 해결이 안되는 거다.서칭한 결과 소수 구하기 문제는 시간초과를 주의해야 하고, 소수 문제에서 시간초과를 피하기 위해 에라토스테네스의 체라는 개념을 알아두면 유용하다는 결론을 내렸다.(하지만 공부 결과 모든 소수 문제에 적용되는 것은 아니다..!) 에라토스테네스의 체에라토스테네스의 체란?어떤 수 n 이하의 모든 소수를 찾는 간단하고 빠른 방법으로, 자기 자신을 제외한 배수를 모두 차례대로 지우는  방식이다.더이상 지울 수 없을 때 남아있는 수들이 소수이다. 에라토스테네스의 시간복잡도는 O(n log(logn))이다.  에라토스네네스의 체는 '특정 범위 내의 소수'를 판정하는 데에만 효율적이다. 만약 주어진 수 하나가 소수인가?만을 따..
[백준/1927] 최소 힙
·
PS/BOJ&Programmers
문제를 잘 이해하면 구현은 어렵지 않다. 첫번째 시도import sysn = int(sys.stdin.readline())heap = []# 자연수라면 in heap 0이라면 출력 + out heapfor _ in range(n): x = int(sys.stdin.readline()) if x == 0 and len(heap) != 0: print(min(heap)) heap.remove(min(heap)) elif x != 0: heap.append(x) else: print(0) 혼자서 문제에 따라 잘 구현한 것같은데,, 시간 초과ㅠㅠ구글링 후 알게된 점은 파이썬에서 따로 heappush, heappop을 제공한다는 것이었다..!..
[백준/14912] 숫자 빈도수
·
PS/BOJ&Programmers
int > strfor i in range(1, n+1): for j in str(i): 위 코드의 의미는 1부터 n까지의 숫자(int)를 만들고, 그 숫자들을 str로 변형한다는 뜻이다.숫자 빈도수 문제에서는 입력된 d에 해당하는 숫자와 같은 숫자의 빈도를 체크하라고 했으니,이중 for문 아래에 다음과 같이 작성해주면 된다. 전체 코드n,d = map(int, input().split())cnt = 0for i in range(1, n+1): for j in str(i): if j == str(d): cnt += 1print(cnt)  프로그래밍을 C로 시작해서 그런지 원시적으로 코드를 짜는 습관이 없지 않아 있다..다른 사람의 코드를 참고해보면 count함수..
[백준/1157] 글자 공부
·
PS/BOJ&Programmers
처음 쓴 코드str = input()size = len(str)cnt = [0 for i in range(size)] # 입력 받은 문자열의 size 만큼 배열 선언 (카운팅을 위해)for i in range(size): for j in range(i+1, size): if str[i] == str[j]: # 이중 포문으로 문자열 서로서로 비교 cnt[i] += 1 # 같은 문자열이 나오면 cnt 배열을 + 해준다.for i in range(len(cnt)): if cnt[i] == cnt[i+1]: print('?') exit()m = max(cnt)if m == 1: print(str.upper()) else: pri..
sebinChu
'Problem Solving' 태그의 글 목록 (4 Page)