전체 글 796

백준 2153번 소수 단어 파이썬

리뷰딕셔너리와 에라토스테네스의 체로 풀이하였다. 문제 풀이a~Z범위의 알파벳을 키로 갖고 각 순서를 value로 갖는 딕셔너리를 초기화 해준다.문자열을 입력 받고 각 문자를 딕셔너리와 비교하여 value의 합을 구한다.점수가 나올 수 있는 최대값 보다 크게 배열을 1로 초기화 하고 소수의 경우 0으로 최신화 해준다.배열의 점수 인덱스가 1이라면 소수 0이라면 소수가 아님을 출력해 준다. 참고 사항없음  정답 코드dic = {}point = 1for i in range(97, 123): dic[chr(i)] = point point += 1for i in range(65, 91): dic[chr(i)] = point point += 1s = input()prime = 0for char..

백준 1629번 곱셈 파이썬

리뷰모듈러 연산을 통한 재귀 풀이 문제 풀이모듈러 연산의 성질을 활용하여 재귀를 통해 값을 구하였다.초기 입력받은 a, b, c를 재귀를 사용할 함수에 보내준다.a가 밑, b가 지수이므로 b가 0이 될때까지 실행을 하고 b가 0일 경우 a^b는 1이므로 1을 리턴해 준다.b가 0보다 클 경우 b를 0으로 나눈 값을 재귀 시킨다, 이후 짝수일 때는 a^(b/2) * a^(b/2)를 c로 나눈 나머지 값을 half로 정의, 홀수일 때는 짝수에서 나온 값 half에 밑 a를 한번 더 곱해준 후 c로 나눈 나머지 값을 half로 정의한다.이후 half를 리턴해 주면 된다. 참고 사항모듈러 연산 정보덧셈: (a+b)%m=((a%m)+(b%m))%m곱셈: (a×b)%m=((a%m)×(b%m))%m거듭제곱: (a^b..

백준 15663번 N과 M (9) 파이썬

리뷰리스트, 튜플, 세트, BFS를 짬뽕하여 풀었다. 이게 최적화 코드인지는 잘 모르겠다.. 문제 풀이n, m값과 숫자 리스트를 입력 받고 정답을 저장할 빈 set를 초기화 해준다.BFS에 n과 m, 그리고 방문 처리와 임시 저장용 빈 리스트를 초기 기본값으로 세팅해준다.임시 리스트가 m의 길이와 같을 경우 해당 리스트를 튜플로 변환하여 set에 add를 해준다.i번째 인덱스에 첫 방문일 경우 방문 처리 및 리스트에 값을 저장해 주고 재귀를 호출해 준다.이후 for문을 돌기 전에 방문처리와 추가했던 값을 다시 빼준다.모든 작업이 완료된 경우 set를 리스트로 변환 후 오름차순으로 정렬해 준다.정답 리스트를 순회하며 값이 저장된 리스트를 언패킹하여 출력해 준다. 참고 사항set를 사용함으로서 자동으로 중복..

SWEA 4193번 D4 수영대회 결승전 ( 완전 탐색 + 구현 ) C++, 파이썬

리뷰1BFS를 사용해 문제를 풀었다!문제 풀이테스트 케이스의 개수를 받아와 FOR문을 개행하고 배열의 크기 N을 받아와 N*N크기의 벡터에 값을 채워준다.시작 지점과 도착 지점을 입력받아 시작 지점을 (x, y, 0)의 튜플로 만들어 준다, 4방향 리스트도 전역으로 초기화.bfs의 인자로 만들어둔 튜플과 도착 지점의 x, y좌표를 넘겨준다. 나머지는 전역변수로 활용해준다.받아온 튜플을 큐에 삽입하고 while루프를 실행한다.큐의 제일 앞 데이터를 꺼내 x, y, time으로 초기화 해준다, 만약 목표 지점에 도착했으면 time을 return4방향 리스트를 돌면서 다음 좌표를 갱신한다. 범위를 넘어가지 않을 경우 2가지 경우에 대해 따로 처리해 준다.다음 좌표가 0일 경우 해당 위치를 시간 + 1값으로 할..

백준 11725번 트리의 부모 찾기 파이썬

리뷰딕셔너리와 BFS를 활용하여 문제를 해결했다. 문제 풀이KEY는 1에서 N, VALUE를 빈 리스트로 갖는 딕셔너리를 초기화 해준다.정점 A, B를 받아오고 딕셔너리의 각각의 KEY와 VALUE로 간선을 추가해 준다.N + 1크기의 방문을 체크할 리스트를 0으로 초기화 해준다.루트를 1로 가정했으므로 BFS를 1을 인자로 주고 시작해준다.1을 큐에 넣어주고, 1을 방문처리 해준다. 이후 WHILE루프를 시작하여 현재 처리할 숫자의 VALUE값을 탐색하고 만약 방문하지 INDEX이라면 현재 숫자가 해당 INDEX의 부모가 된다.BFS가 종료되면 방문 배열 리스트를 INDEX 2부터 차례대로 출력해 주면 된다. 참고 사항출력은 2부터 N + 1까지 해줘야 한다.  정답 코드import sys, colle..

백준 14940 쉬운 최단거리 파이썬, C++

리뷰BFS를 통한 풀이 문제 문제 풀이리스트1에 입력 값을 받고, 리스트2에 출력할 2차원 배열을 n * m만큼 -1로 초기화 한다. 방향 배열을 초기화 한다.리스트1에 존재하는 0값을 찾아 리스트2의 동일한 위치를 0으로 만들어 준다.리스트1에 존재하는 2값을 찾아 시작점을 나타낼 좌표로 저장을 한다.시작 좌표를 기준으로 bfs를 시작한다, 범위를 벗어나지 않으며 다음 좌표의 ans 값이 -1일 경우 현재 위치의 값에 1을 더한 값을 다음 좌표에 할당해 주고 큐에 다음 좌표를 추가한다.bfs가 종료된 이후 리스트2 배열의 전체를 출력해 주면 된다. 참고 사항방문 배열은 딱히 사용할 필요가 없었다.  정답 코드파이썬 코드import sys, collectionsn, m = map(int, sys.stdi..

백준 11724 연결요소의 개수 파이썬, C++

리뷰DFS로 풀었다, 파이썬 첫 시도는 재귀가 너무 깊어서 RecursionError, 이후는 sys를 사용하지 않아 시간초과sys를 사용하니 문제 풀이가 되었다, 확실히 파이썬과 C++ 성능차이가 큰 것 같다. 문제 풀이 1에서 n까지 딕셔너리의 key로 설정하고 value는 빈 리스트로 초기화 해준다.m줄에 걸쳐 들어오는 간선을 딕셔너리에서 양방향으로 각 key의 리스트에 추가해준다.방문을 체크할 리스트를 False로 n + 1의 길이만큼 초기화 해준다.1에서 n까지 for문을 돌며 아직 방문하지 않은 인덱스라면 dfs를 돌려주고 연결 요소를 1만큼 더해준다.총 연결 요소를 출력해 준다. 참고 사항파이썬을 사용할 거라면 sys.stdin.readline()을 사용해 주면 시간 초과를 피할 수 있다.재..

백준 7576번 토마토 파이썬, C++

리뷰BFS를 사용하여 풀었다. 문제 풀이가로 세로의 범위를 변수 M, N 및 2차원 배열의 정보를 리스트로 입력받아 저장하고, 방향 리스트를 초기화 한다.BFS를 실행하고 방문을 표시할 V리스트 및 현재 배열에 존재하는 1들을 큐에 모두 넣어주고 해당 좌표를 방문 처리while루프를 실행하여 큐에 있는 좌표에서 4방향 중 방문하지 않았고 값이 0인 경우 방문처리 및 현재 좌표의 값에 1을 더한 값을 저장해준다, 그리고 큐에 다음 좌표를 추가bfs가 종료된 후 리스트를 순회하며 최고값을 갱신해 주고 만약 0이 있을 경우 flag를 작동시킨다.flag가 작동 되어 있을경우 출력값은 -1, 아닐 경우 최고값에서 1을 빼준 값을 출력해 준다. 참고 사항최고값에서 1을 빼주는 이유는 1인 값에서 부터 시작해서 +..

백준 28702번 FizzBuzz C++

리뷰문제에 대한 이해가 잘 되지 않아 풀이에 생각보다 시간이 오래 걸렸다. 브론즈 문제 아닌거같은데.. 문제 풀이받아온 문자열을 정수로 변환해 주는 함수 to_int를 작성해 주고 받아온 문자열 세개를 각각 함수를 돌려준다.만약 문자열이 FizzBuzz 라면 -15를 리턴, Fizz라면 -3, Buzz라면 -5를 리턴해 준다.아무것도 해당이 되지 않으면 문자열을 정수형으로 바꾸어 리턴정답 변수를 정수형으로 초기화 하고 만약 첫번째 문자열이 0이상 즉, Fizz나 Buzz나 FizzBuzz가 아닐 경우 3을 더한값을 정답 변수에 할당해 준다, 두번째 문자열일 경우 +2, 세번째 문자열일 경우 +1to_str 함수를 작성하고 정답 변수에 저장된 정수가 15의 배수면 FizzBuzz, 3의 배수면 Fizz, ..

백준 30802번 웰컴 키트 C++

리뷰  문제 풀이셔츠의 총 개수를 변수 n에 입력을 받고 각 사이즈의 셔츠 개수 정보를 벡터에 추가해 준다.이후 티셔츠 묶음과 펜 묶음을 각각 변수 t, p에 받아주고 변수 cnt를 0으로 초기화 해준다.셔츠 개수를 t로 나눈 값을 변수 cnt에 더해준다. (소숫점이 발생할 경우 올림 처리해 준다.)cnt를 출력해 준 후, n을 p로 나눈 몫과 나머지를 각각 출력해 주면 된다.  참고 사항없음  정답 코드#include #include #include #include using namespace std;int main() { int n, a, t, p, i, j; vector shirts; cin >> n; for (i = 0; i > a; shirts.push_back(a); } cin >> t >>..

백준 1697번 숨바꼭질 파이썬

리뷰bfs로 해결하였다. if문에서 순서를 잘못 배치해서 계속 indexError가 났다.. 휴 문제 풀이   현재 위치 n과 목표 위치 k를 변수로 받아오고 방문 처리할 리스트를 100001 크기로 생성한다. 0 에서 10만 범위방향은 현재 위치 x에서 -1 혹은 1로 이동하거나 *2인 위치로 이동하는 것이니 -1 및 1만 생성해 준다.현재 위치, 이동 수를 튜플로 bfs를 실행한다. 입력받은 튜플을 큐에 넣고 현재 위치를 방문 표시 한다.bfs를 실행한다. 이때 이동할 범위가 방문 리스트의 범위를 초과하지 않도록 주의한다.현재 위치가 k에 도달했을 경우 이동한 횟수를 출력해 준다. 참고 사항if문을 실행할때 이동할 위치가 0이상 10만 이하인지를 먼저 체크해 줘야 나처럼 indexError가 나지 않..

백준 1012번 유기농 배추 파이썬

리뷰BFS를 사용하여 풀었다, x, y축 잡는게 아직까진 헷갈리는 것 같다. 문제 풀이테스트 케이스의 수와 방향을 나타낼 리스트를 초기화 해준다.m * n크기의 2차원 배열을 0으로 초기화 하고, 방문을 나타낼 배열도 동일한 크기, False로 초기화 해준다.이후 배추의 위치를 받아와 해당 위치를 2차원 배열에 1로 최신화 해준다.이후 배열 전체를 돌며 bfs를 실행해준다. 참고 사항x와 관련된 행은 n이고 y와 관련된 행은 m이다.  정답 코드from collections import dequet = int(input())dist = [(1, 0), (-1, 0), (0, 1), (0, -1)]for _ in range(t): m, n, k = map(int, input().split()) ..

백준 2822번 점수 계산 C++

리뷰map을 처음으로 사용해 보았다. 파이썬 딕셔너리가 훨 편하다.. 문제 풀이각 점수와 인덱스를 저장하기 위해 map을 통해 점수는 key로 인덱스는 value로 받아왔다.벡터에는 값만 저장 후 내림차순으로 정렬하여 상위 5개 점수의 합을 구해주었다.인덱스를 나타낼 벡터를 새로 초기화 하고 상위 5개 점수를 키로 갖는 인덱스를 해당 벡터에 추가해 주었다.상위 5개 점수의 합 출력 인덱스 벡터를 오름차순으로 정렬 후 상위 5개의 인덱스 출력 참고 사항모든 문제에 대한 점수는 서로 다르기에 점수를 map의 key값으로 받아도 괜찮다.  정답 코드#include #include #include #include #include using namespace std;int main() { map dic; vect..

백준 5054번 주차의 신 C++

리뷰첫C++ 정렬 문제였다. 문제 풀이상점의 위치를 벡터의 인자로 받아준다. 입력받은 벡터를 오름차순으로 정렬해 준다.가장 주차하기 좋은 장소는 첫번째 상점의 위치이다. 첫번째 상점부터 벡터의 요소까지의 거리를 계산해 준다.모든 거리를 더해준 후 마지막으로 차로 돌아오는 거리를 계산해 준다.모든 거리 합을 출력해 주면 된다. 참고 사항내림 차순으로 정렬해도 상관 없을듯 하다.  정답 코드#include #include #include using namespace std;int main() { int t, n, i, j, num; cin >> t; for (i = 0; i > n; vector lst; for (j = 0; j > num; lst.push_back(num); } int ans =..

백준 1292번 쉽게 푸는 문제 C++

리뷰벡터에 값을 넣어 주고 구간 합을 구하는 문제 문제 풀이벡터를 0으로 초기화 해준다. 0번 인덱스는 참조할 일이 없다.구간의 최대 범위가 1000이므로 벡터를 길이 1000이상이 되도록 만들어준다.2중 while문을 통해 1, 2, 2, 3, 3, 3, 4, 4, 4, 4 .. 의 값을 벡터에 push 해준다.합을 구할 구간을 나타낼 두 변수를 입력 받고 해당 구간의 합을 구한 뒤 출력해 준다. 참고 사항없음  정답 코드#include #include using namespace std;int main() { vector lst = { 0 }; int index = 1; int a, b; cin >> a >> b; while (lst.size()

백준 2953번 나는 요리사다 C++

리뷰배열에서 가장 큰 합을 가진 행의 값과 인덱스를 구하는 문제 문제 풀이2차원 배열 안에 입력값을 받아와 준다.각 행의 값의 합을 최대값과 비교하고, 최대값보다 높은 합을 가진 행이면 그 인덱스를 저장한다.합이 가장 큰 행의 합과 해당 행의 인덱스를 출력해 준다. 참고 사항인덱스에 +1을 해줘야 해당 참가자의 번호가 된다.  정답 코드#include #include using namespace std;int main() { int lst[5][4]; for (int i = 0; i > lst[i][j]; } } int max_index = 0; int max_val = 0; for (int i = 0; i max_val) { max_val = temp; max_index = i + 1; }..

백준 2592번 대표값 C++

리뷰배열의 평균과 max_count값을 구하는 문제 문제 풀이길이 10짜리 배열을 초기화 후 해당 배열에 입력값을 모두 받아준다.배열내 요소의 값을 모두 더해주고 해당 값이 배열내에 몇개 존재하는지 찾아준다.현재 최대 많이 나온 값이라면 해당 값을 저장해 주고 더 많이 나온 값이 있다면 최신화 해준다.배열 내 요소의 값을 10으로 나눈 값과 가장 많이 나온 값을 출력해 준다. 참고 사항없음  정답 코드#include #include using namespace std;int main() { int a, i, j; int sum = 0; int nums[10]; for (i = 0; i > nums[i]; } int max_cnt = 0; int max_val = 0; for (i = 0; i

SWEA 1979번 D2 어디에 단어가 들어갈 수 있을까 파이썬, C++

리뷰1브루트포스 알고리즘을 통한 풀이문제 풀이n * n 크기의 배열을 전체 탐색해 주었다.우선 가로의 경우 (i, j) 인덱스의 요소가 1일 경우 temp1를 1 올려준다. 0일 경우 현재 temp1에 저장된 값이 k와 동일하다면 cnt를 1올려준다. 이후 temp1을 0으로 초기화세로의 경우 (j, i) 인덱스의 요소가 1일 경우 temp2를 증가, 0일 경우 상동마지막에 0을 만나지 않은 케이스가 있을 수도 있으므로 for문이 끝난 후 해당 작업을 한번 더 실행해 준다.각 테스트 케이스마다 케이스 번호와 cnt값 출력 참고 사항temp가 정확히 k와 동일할때만 cnt를 추가해 주어야 한다. 정답 코드파이썬t = int(input())for c in range(1, t + 1): n, k = ma..

백준 10995번 별찍기 - 20 C++

리뷰나머지를 활용한 문제 문제 풀이입력받은 n의 수만큼 for문을 개행해 준다.만약 현재 for문의 실행 횟수가 짝수번째 일 경우 "* "를 n개만큼 출력해 준다.반대로 홀수번째 일 경우 " *"를 n개만큼 출력해 준다. 참고 사항for문에서 i값을 적절히 배분하면 된다.  정답 코드#include using namespace std;int main() { int n, i, j; cin >> n; for (i = 0; i

백준 2921번 도미노 C++

리뷰처음엔 문제가 이해가 안됐고, 이해가 된 후에는 점화식을 어떻게 세워야 할지 고민이 됐다. 정답률이 어떻게 80%가 넘는거지? 문제 풀이경우의 수를 생각하면 도미노 한칸은 i, 다른 도미노 한칸은 j라고 생각해 보자i도미노가 0 ~ n까지 들어올때 j도미노는 i부터 n까지 들어올 수 있다.예를 들어 n이 3이라면 i도미노가 0일때 j도미노는 0~3까지 들어올 수 있다.i도미노가 1일때 j도미노는 1~3까지 들어올 수 있다. 이를 n까지 반복한다.for문이 종료되면 최종 정답을 출력해 준다. 참고 사항n                1x011             y001            2x012122          y000112         3x0123123233      y0000111223..

728x90