[백준/15656] N과 M(7)
·
PS/BOJ&Programmers
(1,3) (3,1)같은 경우도 모두 출력(중복 순열)을 해주어야 하기 때문에 파이썬 itertools의 product를 사용했다. 1번 코드from itertools import product as pn,m = map(int,input().split())num = list(map(int,input().split()))num.sort()num = map(str, num)ans = map(' '.join, p(num, repeat=m))print('\n'.join(ans)) 2번 코드from itertools import product as pn,m = map(int,input().split())num = sorted(list(map(int,input().split())))for i in p(num,rep..
[백준/11383] 뚊 | 2차원 이미지 | 행렬 한줄씩 걷어내기(?)
·
PS/BOJ&Programmers
알고리즘N x M 크기의 '이미지'와 N x 2M 크기의 '이미지'가 주어지는 거라서 행렬로 생각하는 게 더 수월하다.처음에 헷갈렸던 점은 일단 큰 for문 안에서 비교를 해야 하는데 입력이 NxM크기의 이미지가 먼저 들어온 다는 거다.그러면for _ in range(n): img1 = input() img2 = input() 이런식으로도 받을 수 없기 때문에..(리스트인 경우도 마찬가지)n,m = map(int,input().split())img1 = [input() for _ in range(n)]img2 = [input() for _ in range(n)] 이렇게 한 줄 for문으로 입력을 받아주었다. 또한, img2(Nx2M 그림)와 img1을 늘린 ans를 한 줄씩 비교..
[백준/1942] 디지털시계 | 1초씩 증가 => while t += 1
·
PS/BOJ&Programmers
시간 표현(시,분,초)시/분/초를 나눠서 구현해야 하는 문제는 알고리즘을 모르면 꽤 돌고 돌아서 구현을 하는 경우가 생긴다. (유경험자)이 문제에서는 3으로 나누어 떨어지는 시계 정수의 개수를 구해야 하지만,시간 문제를 푸는 방법에 집중하여 포스팅하려 한다. (복습용으로..🤓) 시: 0부터 24까지의 숫자로 나타낼 수 있음. 60분에 1시간이므로 분값이 60으로 증가되었을 때, 분 변수는 0으로 초기화되고 시 변수는 +1분: 0부터 60까지의 숫자로 나타낼 수 있음. 60초에 1분이므로 60초가 되었을 때 초 변수는 0으로, 분 변수에는 +1 추가초: 0부터 60까지의 숫자로 나타낼 수 있음.# 표현 방법 if s1 == 60 : m1 += 1; s1 = 0 if m1 == 60 : h1 += 1; m..
[백준/2309] 일곱 난쟁이 | sorted()를 반복문의 대상으로
·
PS/BOJ&Programmers
알고리즘들어오는 순서에 상관없이 숫자 7개의 합을 100으로 맞춰야 하기 때문에 파이썬 itertools의 combinations를 사용했다.알고리즘은 잘 생각했는데 출력물이 깔끔하지 않아서 아쉬웠다. 다른 사람의 코드를 보니 sorted를 for문의 반복횟수로 지정해주었다. 파이썬 for문은 어떤 시퀀스(sequence)를 반복하는 문법이므로 sorted가 반복횟수가 될 수 있는 것이다. 최종 코드from itertools import combinations as combt = []h = 0for _ in range(9): t.append(int(input())) for i in comb(t,7): if sum(i) == 100: i = list(i) i.sor..
[백준/10809] 알파벳 찾기 | find() 찾고자 하는 문자의 인덱스를 반환
·
PS/BOJ&Programmers
알고리즘파이썬 내장함수 find와 아스키코드를 활용하여 문제를 풀 수 있다.find 함수는 해당 문자열에서 괄호 안의 문자가 몇 번째에 나타나는지 인덱스를 반환한다.만약, 해당 문자가 없다면 -1을 반환한다. 소문자 a부터 z까지의 아스키 코드 넘버는 97부터 122까지다.(대문자 A to Z는 65 ~ 90이다.) 전체 코드s = input()alpha = list(range(97,123)) # a ~ zfor i in alpha: print(s.find(chr(i))) 소문자 알파벳 전체를 아스키 코드로 (97번부터 122번까지) 리스트에 저장한다.저장된 소문자 알파벳 아스키 코드를 for문으로 돌면서 포함되었는지, 아닌지 확인해주면 된다!
[백준/1436] 영화감독 숌
·
PS/BOJ&Programmers
처음 작성한 코드처음에 숫자를 while 문에서 계속 +1 해주고idx를 설정해서  n번째가 나오면 break를 해주는 코드를 작성했다. n = int(input())i = 0num = 665while True: num += 1 s_num = str(num) i += 1 if '666' in s_num and i == n: print(s_num) break 코드를 보면 검사할 필요가 없는 idx 번호까지 즉, 종말의 숫자가 아닌 것까지 카운트를 하기 때문에 잘못된 구현이다. 최종코드n = int(input())i = 0num = 665while True: num += 1 s_num = str(num) i += 1 if '666..
[백준/14592] 2017 아주대학교 프로그래밍 경시대회(small) - 파이썬
·
PS/BOJ&Programmers
알고리즘N의 크기가 1이 문제를 구현하면서 조건 거를 때 if 문 사용과 중복을 어떻게 걸러낼 것인지에 대해서 조금 익숙해진 것을 느꼈다.  최종 코드n = int(input())total = []cnt = []t = []for _ in range(n): s,c,l = map(int, input().split()) total.append(s) cnt.append(c) t.append(l) for i in range(n): # 같은 값이 존재하면 if total.count(total[i]) >= n: # 제출 횟수 같은 경우 if cnt.count(cnt[i]) >= n: print(t.index(min(t))+1) ..
[백준/13424] Three Dots / 완전탐색 - 파이썬
·
PS/BOJ&Programmers
알고리즘이 문제는 완전탐색 방식으로 풀면 점의 개수가 1000 개일 때, 1000 * 1000 * 1000 = 10^9로 시간 초과를 하게 된다.따라서 세 점의 거리가 동일한 케이스를 모두 계산하는 방법이 아닌, 동일한 간격이 존재하는 점을 찾는 방식으로 구현하도록 한다. 수직선 상에 임의의 세 점 a,b,c가 있을 때 점 C는 b에서 a와 b의 거리만큼 더한 값이다.이 알고리즘을 활용하여 점 C를 찾고, 이 값이 입력받은 list에 존재한다면 세 점은 동일한 거리를 가진 점들이다. 최종 코드from collections import defaultdictt = int(input())for _ in range(t): n = int(input()) dots = sorted(list(map(int,..
[백준/12759] 틱! 택! 토! - 파이썬
·
PS/BOJ&Programmers
첫번째 시도개인적으로 이 문제가 어려웠던 이유는 게임이 끝나고 승부를 판단하는 게 아니라 입력이 될 때 누가 언제 이기는지 알아내야 하기 때문에 헤맸다. 만약에 승부만 판단하는 문제였다면, 플레이어 1과 2가 했던 게임을 입력 받고 승부 조건만 확인하면 되기 때문이다. 그래서 처음에는 이렇게만 이해하고 다음과 같이 코드를 작성했다.# 먼저 시작하는 사람n = int(input())g = [[' ']*3 for _ in range(3)]for i in range(9): r,c = map(int, input().split()) # 게임판 if i % 2 == 0: g[r-1][c-1] = 'X' else: g[r-1][c-1] = 'O' # 승부 확인을 위해서 새로운 배열에 대입. ..
[백준/1100] 하얀 칸 | 파이썬 2차원 리스트
·
PS/BOJ&Programmers
파이썬 2차원 리스트 이 문제를 풀 때 8x8의 체스판을 입력 받고 정의해야 한다. 파이썬 2차원 리스트를 선언하는 방법은 다음과 같다.파이썬 2차원 리스트는 좌표평면이나 행렬 등과 같은 표현을 해야할 때 쓰이므로, 익혀두는 게 좋을 것같다.# 방법1arr = [list(input()) for _ in range(8)]# 방법2arr = []for i in range(8): arr.append(list(input()))  문제 해설TFTFTF... FTFTF...  TFT...                                             체크무늬 체스판을 떠올리면 된다. 하얀 칸 위에 말이 몇 개 있는지 출력해야 하기 때문에, 하얀 칸의 인덱스에 대한 정보를 알아야 한다. 이때 행..
[백준/14582] 오늘도 졌다 | 야구 | 파이썬 리스트 누적합
·
PS/BOJ&Programmers
문제 이해평소 야구를 즐겨보지 않아서 그런지 초와 말에 대한 개념이 없었다.그래서 처음엔 그냥 i번째에 이기고 있으면 역전패가 성립한다고 코드를 구현했는데 틀린 거다...!질문 게시판을 통해 반례를 찾아보니 출제자가 그래서 문제 마지막에 경기는 1회초 -> 1회말 -> 2회초 -> ... -> 9회초 -> 9회말이라는 설명까지 덧붙인 듯하다.역시 문제를 꼼꼼히 잘 읽는 것도 중요하다. 괜히 써진 문장은 없기 때문에 최대한 힌트를 많이 얻어가는 게 유리하다.  파이썬 리스트 원소 누적합 게임은 현재까지 얻었던 점수들의 합으로 판단을 하기 때문에, 누적합을 구해서 승부를 판단했다.a = list(map(int, input().split()))b = list(map(int, input().split()))fl..
[백준/1929] 소수 구하기 | 에라토스테네스의 체
·
PS/BOJ&Programmers
개요백준 소수 문제들이 눈에 들어와서 푸는데,, 이 문제만 같은 방식으로 해결이 안되는 거다.서칭한 결과 소수 구하기 문제는 시간초과를 주의해야 하고, 소수 문제에서 시간초과를 피하기 위해 에라토스테네스의 체라는 개념을 알아두면 유용하다는 결론을 내렸다.(하지만 공부 결과 모든 소수 문제에 적용되는 것은 아니다..!) 에라토스테네스의 체에라토스테네스의 체란?어떤 수 n 이하의 모든 소수를 찾는 간단하고 빠른 방법으로, 자기 자신을 제외한 배수를 모두 차례대로 지우는  방식이다.더이상 지울 수 없을 때 남아있는 수들이 소수이다. 에라토스테네스의 시간복잡도는 O(n log(logn))이다.  에라토스네네스의 체는 '특정 범위 내의 소수'를 판정하는 데에만 효율적이다. 만약 주어진 수 하나가 소수인가?만을 따..
[백준/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
'구현' 태그의 글 목록 (2 Page)