[백준/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...                                             체크무늬 체스판을 떠올리면 된다. 하얀 칸 위에 말이 몇 개 있는지 출력해야 하기 때문에, 하얀 칸의 인덱스에 대한 정보를 알아야 한다. 이때 행..
[백준/11652] 카드 - 파이썬
·
PS/BOJ&Programmers
알고리즘처음에는 정수를 하나씩 입력 받으면 정렬해서, 양옆을 비교한 뒤 같은 값이면 카운팅을 해주는 방법을 고안했다. 그러나 같은 값이 몇개인지 세어볼 때는 딕셔너리를 이용하는 게 효율적이다.기준이 되는 값을 key에, 해당 개수를 value에 저장하면 된다.얼마 전에 풀었던 https://www.acmicpc.net/problem/1159 문제도 이와 비슷한 알고리즘으로 같은 값 개수 세기문제를 해결할 수 있다. 1159번: 농구 경기상근이는 농구의 세계에서 점차 영향력을 넓혀가고 있다. 처음에 그는 농구 경기를 좋아하는 사람이었다. 농구에 대한 열정은 그를 막을 수 없었고, 결국 상근이는 농구장을 청소하는 일을 시작www.acmicpc.net  for _ in range(n): num = int..
[백준/14582] 오늘도 졌다 | 야구 | 파이썬 리스트 누적합
·
PS/BOJ&Programmers
문제 이해평소 야구를 즐겨보지 않아서 그런지 초와 말에 대한 개념이 없었다.그래서 처음엔 그냥 i번째에 이기고 있으면 역전패가 성립한다고 코드를 구현했는데 틀린 거다...!질문 게시판을 통해 반례를 찾아보니 출제자가 그래서 문제 마지막에 경기는 1회초 -> 1회말 -> 2회초 -> ... -> 9회초 -> 9회말이라는 설명까지 덧붙인 듯하다.역시 문제를 꼼꼼히 잘 읽는 것도 중요하다. 괜히 써진 문장은 없기 때문에 최대한 힌트를 많이 얻어가는 게 유리하다.  파이썬 리스트 원소 누적합 게임은 현재까지 얻었던 점수들의 합으로 판단을 하기 때문에, 누적합을 구해서 승부를 판단했다.a = list(map(int, input().split()))b = list(map(int, input().split()))fl..
[백준/7510] 고급 수학
·
PS/BOJ&Programmers
🔎 알고리즘 삼각형의 세 변의 길이가 주어졌을 때, 이 삼각형이 직각 삼각형인지 아닌지 판단하기 위해 피타고라스의 정리의 역을 이용하면 된다. 피타고라스의 정리 : 직각삼각형에서 빗변 길이의 제곱은 다른 두 변의 길이의 제곱의 합과 같다. 피타고라스 정리의 역 : 세 변의 길이가 a,b,c인 삼각형에서 a^2 + b^2 = c^2이면 c가 빗변인 직각삼각형이다. 💻 최종 코드 각 변의 길이 위치를 알아야 계산을 할 수 있기 때문에 sorted(s)로 입력 받은 값을 정렬해주고, 인덱싱을 통해서 피타고라스의 역을 계산해주었다. n = int(input()) for i in range(n): s = list(map(int, input().split())) s = sorted(s) print('Scenario..
[백준/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 함수를..
[python] 파이썬 정렬 함수 sort와 sorted의 차이
·
언어/PYTHON
우리가 어떤 수들을 정렬하고 싶을 때 sort와 sorted 두 가지 방법을 활용할 수 있다.같은 기능을 하는 두 함수는 왜 따로 존재할까? 두 메서드의 차이점에 대해서 알아보자.  1. sort'리스트'에만 사용할 수 있는 오름차순 정렬 메소드이다. list_name.sort() 형식으로 선언한다.reverse = True 인자를 사용해서 내림차순으로도 출력이 가능하다.또한 print(l.sort())를 하면, 'None'이라는 값을 출력하는 걸 알 수 있는데, sort 메소드는 아무것도 리턴하는 것이 없고, 기존 리스트 자체를 정렬하기 때문이다.2. sortedsorted는 리스트 뿐만 아니라 다양한 자료구조에서 사용 가능하다. sorted(list_name) 형식으로 선언한다.reverse = Tr..
[python] 파이썬 출력 tip!
·
언어/PYTHON
파이썬을 사용하다보면 여러가지 출력 팁이 유용할 때가 있다. 오늘은 출력팁에 대해서 알아보자. 1. end 일반적으로 파이썬에서 print 함수를 사용하여 여러 케이스를 출력하면, 다음과 같이 출력된다. n = int(input()) for i in range(1,n+1): print('Hello World') 이유는 print 함수는 자동적으로 줄바꿈을 해서 출력을 하기 때문이다. 줄바꿈 없이 출력을 하고싶으면, end라는 인자를 활용하면 된다. n = int(input()) for i in range(1,n+1): print('Hello World', end = ', ') 깔끔하게 ', ' 단위로 한줄에 출력되는 걸 확인할 수 있다. 2. format 출력을 할 때 문자열 사이에 변수를 끼워야 할 때..
[백준/15726] 이칙연산
·
PS/BOJ&Programmers
처음 작성한 코드 a,b,c = map(int,input().split()) # 가장 작은 값을 나누고 큰 값끼리 곱함 print(max(a*b/c)) 'float' object is not iterable 이라는 오류가 발생한다. max 함수는 iterable(반복가능한) data에 적용되는 함수이기 때문에 두 개 이상의 값을 작성하거나, list와 같은 여러 데이터의 집합에 적용해야 한다. 최종 코드 a,b,c = map(int,input().split()) # 가장 작은 값을 나누고 큰 값끼리 곱함 print(max(int(a*b/c), int(a/b*c))) 둘 중에 더 큰 값을 출력하면 되니까 위와 같이 코드를 작성하면 된다. 굳이 큰 수 작은 수 비교를 하지 않아도 연산을 하고나서 큰 값을 판..
[백준/1343] 폴리오미노
·
PS/BOJ&Programmers
🐤 처음 짠 코드 - 실패 board = list(input().split('.')) ans = str() for i in range(len(board)): target = len(board[i]) if target % 2 !=0: # X의 개수가 홀수인 게 하나라도 존재하면 print(-1) exit() if board[i] == '': ans += '.' else: if target % 4 == 0: ans += 'AAAA' elif target % 2 == 0: ans += 'BB' # 여기서 그리디 else: 문제는 이해 했는데 그리디 작성에서 실패했다. 만약 길이가 6이나 10인 X문자열을 만난다면 먼저 'AAAA'를 먼저 채워주고, 남은 2자리에 'BB'를 채워준다는 로직을 생각했는데 실패 💻..
sebinChu
Studying IT with cobinding