본문 바로가기

알고리즘 공부/연습 문제

(11)
백준) 1475-방 번호 (파이썬) https://www.acmicpc.net/problem/1475 (실버 5 문제, 30분 걸림) 1475번: 방 번호 첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수이다. www.acmicpc.net 생각 처음 15분 정도 동안은 9의 갯수와 6의 갯수를 전부 세고 비교하여 계산하는 방식으로 구현하려고 했다. 하지만 조금 더 생각해본 결과, 9가 나온 경우, 9를 6으로 바꿔도 된다는 사실을 알게 되었다. 9를 6으로 바꾸고 난 후 어떤 문제가 생길지 생각을 해보니 홀수 번 등장했냐, 짝수 번 등장했냐에 따라 계산식을 달리 결정해야한다는 것을 알았다. 내 코드 # s를 문자의 형태로 입력받는다. 리스트에 추가하기 위한 A 반복문 적용을 위해 문자로 받는다. s..
이코테) 게임 개발-실전 문제 문제 캐릭터의 움직임은 다음과 같이 움직인다. 현재 위치에서 현재 방향을 기준으로 왼쪽 방향(반시계 방향으로 90도 회전한 방향)부터 차례대로 갈 곳을 정한다. 캐릭터의 바로 왼쪽 방향에 아직 가보지 않은 칸이 존재한다면, 왼쪽 방향으로 회전한 다음 왼쪽으로 한 칸을 전진한다. 왼쪽 방향에 가보지 않은 칸이 없다면, 왼쪽 방향으로 회전만 수행하고 1단계로 돌아간다. 만약 네 방향 모두 이미 가본 칸이거나 바다로 되어 있는 칸인 경우에는, 바라보는 방향을 유지한 채로 한 칸 뒤로 가고 1단계로 돌아간다. 단, 이때 뒤쪽 방향이 바다인 칸이라 뒤로 갈 수 없는 경우에는 움직임을 멈춘다. 메뉴얼에 따라 캐릭터를 이동 시킨 뒤에 캐릭터가 방문한 칸의 수를 출력하는 프로그램을 만들어라. 입력 조건: 첫째 줄에 맵..
백준) 1463 - 1로 만들기 (Python) https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 생각 DP 문제의 기본이라고 부를 수 있는 문제이다. DP를 사용하지 않고 문제를 해결할 수도 있으나 DP를 제대로 배우고 써보고자 활용해서 문제를 해결하려 했다. 문제의 입력에 대한 출력 값을 보면서 왜 그러한 값들이 나왔는지 머릿속으로 계속해서 과정을 그려봤다. 내 코드 n=int(input()) d=[0]*(n+1) d[0]=0 d[1]=1 d[2]=1 d[3]=1 for i in range(4,n+1): if i%3==0: d[i]=min(d[i//3]+1,d[i-1]+1) elif i%2==0: d[i..
백준) 1244 - 파이썬 https://www.acmicpc.net/problem/1244 1244번: 스위치 켜고 끄기 첫째 줄에는 스위치 개수가 주어진다. 스위치 개수는 100 이하인 양의 정수이다. 둘째 줄에는 각 스위치의 상태가 주어진다. 켜져 있으면 1, 꺼져있으면 0이라고 표시하고 사이에 빈칸이 하나씩 www.acmicpc.net 생각 과정을 분할해서 생각해봤다. 총 4가지 과정을 거쳐야한다. 1. 스위치의 개수, 스위치의 상태, 학생의 수, 학생 성별과 학생이 받은 스위치 수 구현 2. 학생의 성별이 남자일 경우 받은 스위치 번호의 배수들을 전부 뒤바꾼다 3. 학생의 성별이 여자일 경우 받은 스위치 양 옆 번호들을 계속 비교해서 두 개가 같은 경우 뒤바꾸고 아닌 경우 스탑한다. 4. 20개 단위로 끊어서 출력 이 4..
백준) 10431 - 파이썬 https://www.acmicpc.net/problem/10431 (실버 5) 10431번: 줄세우기 초등학교 선생님 강산이는 아이들을 데리고 단체로 어떤 일을 할 때 불편함이 없도록 새로 반에 배정받은 아이들에게 키 순서대로 번호를 부여한다. 번호를 부여할 땐 키가 가장 작은 아이가 1 www.acmicpc.net 입력 4 1 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 2 919 918 917 916 915 914 913 912 911 910 909 908 907 906 905 904 903 902 901 900 3 901 902 903 904 905 906 907 908 909 910 911 912 ..
백준) 11723 - 파이썬 https://www.acmicpc.net/problem/11723 (실버 5) 11723번: 집합 첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다. www.acmicpc.net 입력 26 add 1 add 2 check 1 check 2 check 3 remove 2 check 1 check 2 toggle 3 check 1 check 2 check 3 check 4 all check 10 check 20 toggle 10 remove 20 check 10 check 20 empty check 1 toggle 1 check 1 toggle 1 check 1 출력 1 1 0 1 0 1 0 1 0..
백준) 2635 - 파이썬 https://www.acmicpc.net/problem/2635 (실버 5) 2635번: 수 이어가기 첫 번째 수가 주어진다. 이 수는 30,000 보다 같거나 작은 양의 정수이다. www.acmicpc.net 입력 100 출력 8 100 62 38 24 14 10 4 6 내 풀이 코드로는 작성하지 못했다. 2번째 수를 선정하는 방법이 핵심이라고 생각했고, 규칙성을 찾거나 모든 경우를 구하거나 둘 중 하나일 것이라고 생각했다. 몇가지 케이스를 직접 적어보고 규칙성은 구하기 힘들다는 것을 판단, 모든 경우를 구하되 n값의 절반 이하는 산정하지 말고 구해보자는 식으로 접근했다. 그러나 반복문, 계산식을 구현하지 못했고 그로 인해 코드로 작성하지 못했다. 풀이 import sys input=sys.stdin..
백준) 2559 - 파이썬 https://www.acmicpc.net/problem/2559 (실버 3) 2559번: 수열 첫째 줄에는 두 개의 정수 N과 K가 한 개의 공백을 사이에 두고 순서대로 주어진다. 첫 번째 정수 N은 온도를 측정한 전체 날짜의 수이다. N은 2 이상 100,000 이하이다. 두 번째 정수 K는 합을 구하기 www.acmicpc.net 입력 10 2 3 -2 -4 -9 0 3 7 13 8 -3 10 5 3 -2 -4 -9 0 3 7 13 8 -3 출력 21 31 내 코드 import sys input=sys.stdin.readline n,k=map(int,input().split()) t=list(map(int,input().split())) result=[] for i in range(n): resul..