[ BOJ ] 12761 : 돌다리 ( SILVER 1 ) / Python
·
-- 예전 기록/BOJ
>> 문제 바로가기 (https://www.acmicpc.net/problem/12761) 문제 동규와 주미는 일직선 상의 돌 다리 위에있다. 돌의 번호는 0 부터 100,000 까지 존재하고 동규는 N번 돌 위에, 주미는 M번 돌 위에 위치하고 있다. 동규는 주미가 너무 보고싶기 때문에 최대한 빨리 주미에게 가기 위해 A, B 만큼의 힘을 가진 스카이 콩콩을 가져왔다. 동규가 정한 다리를 건너는 규칙은 턴 방식인데, 한 턴에 이동할 수 있는 거리는 이러하다. 현 위치에서 +1칸, -1칸을 이동할 수 있고, 스카이 콩콩을 이용해 현 위치에서 A나 B만큼 좌우로 점프할 수 있으며, 순간적으로 힘을 모아 현 위치의 A배나 B배의 위치로 이동을 할 수 있다. 예를 들어 지금 동규가 7번 돌 위에 있고 스카이 ..
[ BOJ ] 1058 : 친구 ( SILVER 2 ) / Python
·
-- 예전 기록/BOJ
>> 문제 바로가기 (https://www.acmicpc.net/problem/1058) 문제 지민이는 세계에서 가장 유명한 사람이 누구인지 궁금해졌다. 가장 유명한 사람을 구하는 방법은 각 사람의 2-친구를 구하면 된다. 어떤 사람 A가 또다른 사람 B의 2-친구가 되기 위해선, 두 사람이 친구이거나, A와 친구이고, B와 친구인 C가 존재해야 된다. 여기서 가장 유명한 사람은 2-친구의 수가 가장 많은 사람이다. 가장 유명한 사람의 2-친구의 수를 출력하는 프로그램을 작성하시오. A와 B가 친구면, B와 A도 친구이고, A와 A는 친구가 아니다. 입력 첫째 줄에 사람의 수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 각 사람이 친구이면 Y, 아니면 N이 주어진다. ..
[ BOJ ] 17952 : 과제는 끝나지 않아! ( SILVER 3 ) / Python
·
-- 예전 기록/BOJ
>> 문제 바로가기 (https://www.acmicpc.net/problem/17952) 문제 성애는 이번 학기에 전공을 정말 많이 듣는다. 이로 인해 거의 매일을 과제를 하면서 보내고 있다. 그런데도 과제가 줄어들 기미가 보이지 않는데, 바로 분단위로 과제가 추가되고 있기 때문이다. 다행히 과제 제출 기한은 학기가 끝날 때까지이다. 너무나도 많은 과제를 하다가 미쳐버린 성애는 아래와 같은 규칙으로 과제를 해 나가고 있다. 과제는 가장 최근에 나온 순서대로 한다. 또한 과제를 받으면 바로 시작한다. 과제를 하던 도중 새로운 과제가 나온다면, 하던 과제를 중단하고 새로운 과제를 진행한다. 새로운 과제가 끝났다면, 이전에 하던 과제를 이전에 하던 부분부터 이어서 한다. (성애는 기억력이 좋기 때문에 아무리..
[ BOJ ] 15970 : 화살표 그리기 ( SILVER 4 ) / Python
·
-- 예전 기록/BOJ
>> 문제 바로가기 (https://www.acmicpc.net/problem/15970) 문제 직선 위에 위치를 나타내는 0, 1, 2, ...와 같은 음수가 아닌 정수들이 일정한 간격으로 오른쪽 방향으로 놓여 있다. 이러한 위치들 중 N개의 위치에 하나씩 점들이 주어진다(). 주어진 점들의 위치는 모두 다르다. 두 점 사이의 거리는 두 점의 위치를 나타내는 수들의 차이이다. 에서는 4개의 점이 주어지고 점 a와 b의 거리는 3이다. 각 점은 N개의 색깔 중 하나를 가진다. 편의상, 색깔은 1부터 N까지의 수로 표시한다. 각 점 p에 대해서, p에서 시작하는 직선 화살표를 이용해서 다른 점 q에 연결하려고 한다. 여기서, 점 q는 p와 같은 색깔의 점들 중 p와 거리가 가장 가까운 점이어야 한다. 만약..
[ BOJ ] 25325 : 학생 인기도 측정 ( SILVER 5 ) / Python
·
-- 예전 기록/BOJ
>> 문제 바로가기 (https://www.acmicpc.net/problem/25325) 문제 학생 이름이 공백으로 구분된 문자열 A가 주어진다. 문자열 A에는 중복된 학생 이름이 존재하지 않는다. 학생 이름은 알파벳 소문자로 이루어져 있다. 각 학생이 좋아하는 학생의 학생 이름 목록이 공백으로 구분된 문자열로 주어진다. 각 학생이 좋아하는 학생은 1명 이상 주어지고, 내가 나를 좋아하는 예는 없다. 나를 좋아하는 학생이 많을수록 나의 인기도가 높다. 인기도가 높은 학생부터 낮은 학생 순으로 학생 이름과 해당 학생을 좋아하는 학생 수를 출력하자. 인기도가 같은 경우 학생 이름 기준으로 오름차순으로 출력하자. 입력 첫 번째 줄에 학생 수 n이 주어진다. 두 번째 줄에 n명의 학생 이름이 공백으로 구분된 ..
[ CodeUp ] 코드업으로 꾸준히 PS 연습하기 20일차 ( 1259 ~ 1271 )
·
-- 예전 기록/CodeUp
오늘 푼 10문제 모두 단순 반복문으로 풀이할 수 있는 문제들이다.
[ BOJ ] 29196 : 소수가 아닌 수 2 ( BRONZE 1 ) / Python
·
-- 예전 기록/BOJ
>> 문제 바로가기 (https://www.acmicpc.net/problem/29196) 문제 이 대회의 운영진 중 한 명인 KSA 학생은 얼마 전 소수 공포증을 극복했으나 또 다른 소수를 구별할 수 없게 되어 버렸다. KSA의 명예를 지키기 위해 어떤 소수 k를 입력받아 k를 나타내는 분수 p/q를 아무거나 구해주자. p와 q는 10^9 이하인 양의 정수이며, k와 p/q의 절대오차 또는 상대오차가 10^(−6) 이하면 정답이다. 입력 첫 번째 줄에 소수 k가 주어진다. 출력 첫 번째 줄에 조건을 만족하는 분수가 존재한다면 YES, 아니라면 NO를 출력한다. 만약 그러한 분수가 존재한다면, 두 번째 줄에 두 정수 p, q를 공백을 사이에 두고 출력한다. 정답이 여러 개 존재한다면 그중 아무거나 출력해..
[ BOJ ] 23324 : 어려운 모든 정점 쌍 최단 거리 ( GOLD 4 ) / Python
·
-- 예전 기록/BOJ
>> 문제 바로가기 (https://www.acmicpc.net/problem/23324) 문제 연두는 방금 "플로이드 와샬 알고리즘"을 공부했다. 이 알고리즘은 N개의 정점으로 이루어진 그래프에서, 모든 정점 쌍의 최단 거리를 O(N^3)에 구해준다. 신이 난 연두는 자신이 좋아하는 그래프를 하나 가져왔다. 이 그래프는 N개의 정점과 M개의 양방향 간선으로 이루어진 단순 연결 그래프이며, 정점에는 1,2,…,n으로 번호가 매겨져있다. 또한 딱 하나의 간선에만 1의 가중치가 있고 나머지 간선은 가중치가 0이다. 이제 이 그래프에서 모든 정점 쌍의 최단 거리의 합을 구해보려고 한다. 즉, 1 ≤ i < j ≤ N를 만족하는 모든 N(N−1)/2개의 쌍 (i,j)에 대해, i번 정점과 j번 정점간의 최단거리..
[ BOJ ] 16927 : 배열 돌리기 2 ( GOLD 5 ) / Python
·
-- 예전 기록/BOJ
>> 문제 바로가기 (https://www.acmicpc.net/problem/16927) 문제 크기가 N×M인 배열이 있을 때, 배열을 돌려보려고 한다. 배열은 다음과 같이 반시계 방향으로 돌려야 한다. A[1][1] ← A[1][2] ← A[1][3] ← A[1][4] ← A[1][5] ↓ ↑ A[2][1] A[2][2] ← A[2][3] ← A[2][4] A[2][5] ↓ ↓ ↑ ↑ A[3][1] A[3][2] → A[3][3] → A[3][4] A[3][5] ↓ ↑ A[4][1] → A[4][2] → A[4][3] → A[4][4] → A[4][5] 예를 들어, 아래와 같은 배열을 2번 회전시키면 다음과 같이 변하게 된다. 1 2 3 4 2 3 4 8 3 4 8 6 5 6 7 8 1 7 7 6 2..
[ BOJ ] 16926 : 배열 돌리기 1 ( SILVER 1 ) / Python
·
-- 예전 기록/BOJ
>> 문제 바로가기 (https://www.acmicpc.net/problem/16926) 문제 크기가 N×M인 배열이 있을 때, 배열을 돌려보려고 한다. 배열은 다음과 같이 반시계 방향으로 돌려야 한다. A[1][1] ← A[1][2] ← A[1][3] ← A[1][4] ← A[1][5] ↓ ↑ A[2][1] A[2][2] ← A[2][3] ← A[2][4] A[2][5] ↓ ↓ ↑ ↑ A[3][1] A[3][2] → A[3][3] → A[3][4] A[3][5] ↓ ↑ A[4][1] → A[4][2] → A[4][3] → A[4][4] → A[4][5] 예를 들어, 아래와 같은 배열을 2번 회전시키면 다음과 같이 변하게 된다. 1 2 3 4 2 3 4 8 3 4 8 6 5 6 7 8 1 7 7 6 2..
[ BOJ ] 1946 : 신입 사원 ( SILVER 1 ) / Python
·
-- 예전 기록/BOJ
>> 문제 바로가기 (https://www.acmicpc.net/problem/1946) 문제 언제나 최고만을 지향하는 굴지의 대기업 진영 주식회사가 신규 사원 채용을 실시한다. 인재 선발 시험은 1차 서류심사와 2차 면접시험으로 이루어진다. 최고만을 지향한다는 기업의 이념에 따라 그들은 최고의 인재들만을 사원으로 선발하고 싶어 한다. 그래서 진영 주식회사는, 다른 모든 지원자와 비교했을 때 서류심사 성적과 면접시험 성적 중 적어도 하나가 다른 지원자보다 떨어지지 않는 자만 선발한다는 원칙을 세웠다. 즉, 어떤 지원자 A의 성적이 다른 어떤 지원자 B의 성적에 비해 서류 심사 결과와 면접 성적이 모두 떨어진다면 A는 결코 선발되지 않는다. 이러한 조건을 만족시키면서, 진영 주식회사가 이번 신규 사원 채용..
[ BOJ ] 24523 : 내 뒤에 나와 다른 수 ( SILVER 2 ) / Python
·
-- 예전 기록/BOJ
>> 문제 바로가기 (https://www.acmicpc.net/problem/24523) 풀이 과정 i번째 수 의 뒤에 나오는 i+1 번째 수가 i번째 수와 같은 수가 아니라면 무조건 i+1이 최솟값 j이다. 같은 수가 연속으로 여러 번 나오다가 다른 수가 나온다면, 다르게 나온 수 앞에 있는 모든 수들의 j 는 해당 다르게 나온 수의 인덱스가 된다. 같은 수가 연속으로 나오는 횟수를 카운팅했다가, 다른 수가 나왔을 때 카운트한만큼 현재 인덱스를 출력하고, 수열의 끝까지 찾았는데도 만족하는 j 가 없는 수들은 -1 을 출력하도록 구현한다. import sys input = sys.stdin.readline n = int(input().rstrip()) arr = list(map(int, input()...