[백준/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..
[자료구조] 트리(Tree)
·
PS/Data Structure
트리트리란? 회사의 조직도, 가계도와 같이 나무처럼 뻗어나가는 모양의 사이클이 없는 그래프다. 노드간선루트 노드: 트리의 맨 꼭대기부모 노드/자식 노드리프 노드: 자식이 없는 노드차수와 깊이 그리고 높이차수: 특정 노드의 자식 수깊이: 특정노드로부터 루트노드와 떨어져있는 정도높이: max깊이 + 1이진트리트리의 자식을 2개로 한정하면, 이진트리배열로 나타내기 좋다. 부모는 i, 왼쪽 자식은 i2, 오른쪽 자식은 i2+1만약 모든 자식이 꽉 차있지 않다면 배열도 같이 비워줘야한다.이진트리는 한번 알면 여러모로 편하다.. 자식이 2개로 제한되어 있기 때문에 구현도 좋다… 그러니 확실하게 알아둘 것! 트리의 순회트리를 탐색하는 순회 방법은 3 가지가 있다.전위 순회(왼>뿌>오)중위 순회(뿌>왼>오)후위 순회(..
[백준/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..
[백준/4949] 균형잡힌 세상 | Stack
·
PS/BOJ&Programmers
알고리즘전형적인 스택 문제다. 우선 괄호의 여는 부분이 왼쪽으로 와야 하기 때문에, 문자열을 돌면서 ( 나 [ 일 때 스택에 넣어준다.만약 스택에 값이 들어있는데 )나 ]가 들어오면 ( or [ 와 짝이 맞아야 하므로, 스택의 탑(stack[-1])을 통해 쌍이 맞는지 확인하고,쌍이 맞다면 스택에서 여는 괄호를 팝해서 스택을 비워준다.쌍이 아니라면 스택에 닫힌 괄호를 넣어준다. 이 알고리즘을 입력 받은 문자열을 모두 검사할 때까지 반복한다. 최종 코드while True: s = input() if s == '.': break stack = [] for i in range(len(s)): if s[i] == '(' or s[i] == '[': stack..
[Python] 파이썬 lambda(익명함수) 함수로 정렬하기
·
언어/PYTHON
파이썬 정렬정렬 메소드인 sort()와 함수 sorted()는 디폴트 값이 오름차순이고, 내림차순으로 정렬을 하기 위해서 reverse 인자를 추가한다. arr = [10, 3, 4, 2, 100]arr.sort(reverse = True)print(arr)# [100, 10, 4, 3, 2]  arr = [10, 3, 4, 2, 100]arr.sorted(arr, reversed = True)print(arr)# [100, 10, 4, 3, 2] * reversed 인자 이외에도 [::-1]을 이용하여 정렬할 수 있다.  lambda(익명함수)어떤 리스트를 정렬하기 위해서는 다양한 기준을 활용할 수 있는데, reversed 인자처럼 key 인자를 활용하면 된다.여기서 lambda(익명 함수)가 key에..
[백준/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...                                             체크무늬 체스판을 떠올리면 된다. 하얀 칸 위에 말이 몇 개 있는지 출력해야 하기 때문에, 하얀 칸의 인덱스에 대한 정보를 알아야 한다. 이때 행..
sebinChu
Studying IT with cobinding