BOJ

BOJ

[백준/BOJ] python 10974번 모든 순열

언어: python 번호: 10974 제목: 모든 순열 등급: 실버3 ​ ​ 풀이 과정: 재귀함수로 풀었다. 리스트를 만들어 해당 숫자에 방문했는지 안했는지를 확인하고 새로운 순열 arr에 추가하는 방식이다. ​ ​ 코드: # 10974 # 순열의현재길이, 모든 숫자의 수, 고를 숫자의 수, 새로 만들 순열, 방문했는지 확인하는 리스트 def permutation(k, n, m, arr, ch): if k==m: print(*arr) else: for i in range(1, n+1): if not ch[i]: ch[i] = True arr[k] = i permutation(k+1, n, m, arr, ch) ch[i] = False N, M = 5, 2 ch = [False]*(N+1) arr = [0..

BOJ

[백준/BOJ] python 10982번 다음 순열

언어: python 번호: 10972 제목: 다음 순열 등급: 실버 3 풀이 과정: 일단 숫자 n과 순열 arr를 입력받는다. arr은 가장 뒤의 숫자부터 2개씩 비교를 하면서 다음 순열을 찾는다. 예를 들어 [1, 3, 4, 2]라는 순열의 다음 숫자를 찾기 위해서는 [4, 2] -> [3, 4] -> [1, 3]의 순서로 비교를 해야한다. 비교할때 앞에 있는 숫자가 더 작으면 두개의 위치를 교환한다. 그리고 교환한 숫자의 뒤를 정렬한다. [1, 3, 4, 2] : 뒤에서부터 4와 2를 비교했는데 앞의 숫자가 더 크니까 그래도 둔다. [1, 3, 4, 2] : 그 다음인 3과 4를 비교했는데 앞의 숫자가 더 작으니 둘의 위치를 교환한다. [1, 4, 3, 2] : 위치를 바꾼 뒤 앞의 숫자인 4를 기준..

BOJ

[백준/BOJ] python 1406번 에디터

언어: python 번호: 1406 제목:에디터 등급: 실버 2 ​ 풀이 과정: 원래는 리스트 하나를 만들어 풀려했지만 시간이 초과되서 스택 2개를 만들어 풀었다. 커서의 위치를 기준으로 왼쪽 리스트(s1)과 오른쪽 리스트(s2)를 만들어 명령에 맞게 pop()함수를 사용했다. ​ 내 코드: import sys INPUT = sys.stdin.readline s1 = list(INPUT()) s2 = [] n = int(INPUT()) for _ in range(n): command = list(INPUT().split()) if command[0]=='L': if s1: s2.append(s1.pop()) elif command[0]=='D': if s2: s1.append(s2.pop()) elif ..

BOJ

[백준/BOJ] python 9093번 단어 뒤집기

언어: python 번호: 9093 제목: 단어 뒤집기 등급: 브론즈 1 ​ 풀이 과정: 내 코드: 문장을 입력받아 단어별로 잘라 뒤집었다. 좋은 코드: 문장을 통으로 뒤집어 꺼꾸로 출력했다. ​ 내 코드: n = int(input()) for i in range(n): s = input().split() for j in range(len(s)): s[j] = s[j][-1::-1] print(*s) 좋은 코드: https://www.acmicpc.net/source/61213179 import sys for _ in range(int(sys.stdin.readline())): a = sys.stdin.readline().split() print(' '.join(a[::-1])[::-1]) 메모: 내가 ..

BOJ

[백준/BOJ] python 10828번 스택

언어: python 번호: 10828 제목: 스택 등급: 실버 4 ​ 풀이 과정: 명령의 수 n을 입력받고, n번 명령을 입력 받아 if문을 사용해 명령에 따라 출력한다. 잘못된 코드: n = int(input()) stack = [] for i in range(n): order = input().split() if order[0]=='push': stack.append(order[1]) elif order[0]== 'pop': if len(stack)==0: print(-1) else: print(stack[-1]) stack.remove(stack[-1]) elif order[0]=='size': print(len(stack)) elif order[0]=='empty': if len(stack)==0..

BOJ

[백준/BOJ] python 5800번 성적 통계

언어: python 번호: 5800 제목: 성적 통계 등급: 실버 5 ​ 풀이 과정: 학급의 수 k, 학생의 수 n, 수학 성적 배열 lst를 입력받는다. 성적을 정렬하고, 예제에 맞춰 학급 번호, 최댓값, 최솟값을 출력한다. 그리고 각 리스트간의 차이를 구해 가장 큰 값을 출력한다. ​ ​ 코드: # 5800 import sys input = sys.stdin.readline k = int(input()) for i in range(k): n,*lst=map(int,input().split()) lst.sort() print("Class {}".format(i+1)) print("Max {}, Min {}, ".format(lst[-1], lst[0]), end='') for i in range(n-1..

BOJ

[백준/BOJ] python 2921번 도미노

언어: python 번호: 2921 제목: 도미노 등급: 브론즈 3 ​ 풀이 과정: 크기가 n인 도미노 세트를 n의 값에 따라 나눈다고 생각하고 각 도미노에 있는 점의 개수는 다음과 같다. f(0) = (0, 0) -> 1개 f(1) = f(0) + (1, 0) + (1, 1) -> f(0) + 1 + 2 개 f(2) = f(1) + (2, 0) + (2, 1) + (2, 2) -> f(1) + 2 + 3 + 4 개 f(3) = f(2) + (3, 0) + (3, 1) + (3, 2) + (3, 3) -> f(2) + 3 + 4+ 5 개 이때 수열의 합을 이용하여 i번째 도미노 세트에 있는 점의 개수의 합은 (3*i**2+3*i)//2임을 알 수 있다. 크기가 n인 도미노 세트에 있는 모든 점의 개수의 ..

BOJ

[백준/BOJ] python 1149번 RGB거리

언어: python 번호: 1149 제목: RGB거리 등급: 실버1 ​ 풀이 과정: ​DP(동적계획법)으로 풀 수 있다. 집의 색깔은 빨강, 초록, 파랑 중에 하나로 칠해야 한다. 이때 i번째(1 i-1번째 집이 초록 또는 파랑 중에 비용이 적은 것 i번째 집은 초록 > i-1번째 집이 파랑 또는 빨강 중에 비용이 적은 것 으로 칠하면 된다. 2차원 배열 DP[n][3]을 만들어 n번째 열에 n번째 집을 칠하는 색깔에 따라 생기는 비용의 총합을 저장해 가장 작은 값을 출력하면 된다. 예제 입력 1 3 26 40 83 49 60 57 13 89 99 dp[n][3] 1번째 2번째 3번째 모든 집을 칠하는 비용 빨강 26 min(40, 83) + 49 = 89 min(96, 73) + 13 = 86 86 초..

kyj0015
'BOJ' 카테고리의 글 목록