망나니 AWOS의 일상
article thumbnail
[python] 백준 5217번 쌍의 합
알고리즘/백준 2022. 1. 14. 10:14

입력 첫 번째 줄에는 테스트 케이스 수 두 번째 줄 ~ 네 번째 줄까지 n 출력 n에 대한 순서 쌍 문제 풀이 간단하게 그림을 그리면 사칙 연산으로 순서 쌍을 나눌 수 있다. 순서 쌍을 이루는 수들은 서로 달라야 하기 때문에 4일 때 2 2는 순서 쌍이 되지 않는다. 해당 부분만 주의하면 쉽게 코드를 짤 수 있다. 완성된 코드!!👍 for _ in range(int(input())): x = int(input()) n = x//2 l = [] for i in range(1, n+1): if i < x - i: l.append(f'{i} {x - i}') print(f'Pairs for {x}: ' + ', '.join(val for val in l))

article thumbnail
[python] 백준 1598번 꼬리를 무는 숫자 나열
알고리즘/백준 2021. 11. 23. 22:44

문제 풀이 두 수의 제한 조건은 10,000,000 이하. 입력을 1과 10000000을 입력받았을 때, 반복문으로 배열을 생성하게 되면... 시간 초과가 날게 분명해서 반복문은 아닐 거라 판단했다. 규칙이 보일거라 생각한다. 입력받은 값에서 1을 빼면 몫과 나머지의 값들이 행열의 값들과 일치하고 입력받은 각각의 행열들의 사칙연산을 하고 절대값을 씌워주면 직선거리 값이 나온다는 것을 알 수 있다. 완성된 코드!👍😊 a, b = map(int, input().split()) a -= 1 b -= 1 print(abs(a // 4 - b // 4) + abs(a % 4 - b % 4))

article thumbnail
[python] 백준 2863번 이게 분수?
알고리즘/백준 2021. 10. 14. 21:54

문제 풀이 2*2짜리 표 -> 2차원 배열을 이용 시계방향으로 회전 후에 4회전 시에는 원점으로 돌아오기 때문에 회전을 담당해줄 메서드, 표의 값을 계산해줄 메서드가 필요. 값을 스왑 해주기 위해 시계방향으로 1회전, 2회전, 3회전 돌렸을 때의 좌표값들을 적어보았고 그 좌표값들을 스왑 해주기 위해 temp 변수를 하나 초기화해주어 swap 해주었다. 간단하게 if문으로 돌릴 수도 있었겠으나 요즘은 배열에 대해서 좀 연습을 하는 중이라서 배열을 써보았다. 완성된 코드!!😀😀 # swap def swap(l): temp = l[0][0] l[0][0] = l[1][0] l[1][0] = l[1][1] l[1][1] = l[0][1] l[0][1] = temp return l # 계산 def cal(l): ..

article thumbnail
[python] 백준 2052번 지수연산
알고리즘/백준 2021. 10. 1. 22:10

문제 요약 및 풀이 문제 자체는 간단하다. 2의 -N승을 계산하면 된다. 하지만 기본적으로 표현할 수 있는 소수점 자릿수를 넘어가게 되면 e^n, e^-n으로 표기가 된다. 그래서 표현할 수 있는 소수점 자리수를 늘리려면 늘리고 싶은 자리 개수를 sosu_N이라고 생각하면 "%. sosu_Nf"와 같이 만들어 주면 된다. 대략 sosu_N을 300으로 조절하면 아래와 같은 결과를 볼 수 있다. 0 같은 경우 rstrip() 메서드를 통해 오른쪽에 있는 0을 지워주면 된다. 완성된 코드!! 😀😁 print(("%.300f" % (1/(2**int(input())))).rstrip("0"))

article thumbnail
[python] 백준 1212번 8진수 2진수
알고리즘/백준 2021. 8. 26. 23:23

문제 요약 및 풀이 8진수를 2진수로 변환하여 출력 8진수를 10진수로 바꾸어 2진수로 변환하면 되겠다 싶어 아래와 같이 구현 입력을 받을 때 8진수로 입력받아 10진수로 변환하도록 하였다. int(input(), 8) bin메서드를 이용하면 10진수를 2진수로 변환하게 되는데 '0b'가 앞에 붙게돼서 슬라이싱을 통해 해당 문자열을 잘라 2진수 만을 출력토록 하였다. 완성된 코드!! 👍😊 octa_n = int(input(), 8) print(bin(octa_n)[2:])

article thumbnail
[python] 백준 1547번 공
알고리즘/백준 2021. 8. 25. 13:19

문제 요약 및 풀이 컵의 위치를 바꾼 횟수 M 컵의 위치 X -> Y 가 M번만큼 주어진다. 최종 몇 번째 컵에 공이 있는지 확인 아래의 표를 가지고 설명을 하겠다. 컵 1, 2, 3은 공의 위치를 표시하려고 썼다. 횟수 : M 싸이클 입력 : X Y 공이 있는 위치 컵 : 1 컵 : 2 컵 : 3 4 1 3 1 3 O 2 2 3 2 O 3 3 1 2 O 4 3 2 3 O cf) 싸이클 3에서는 위치가 그대로이기 때문에 변함이 없다. map으로 여러 개의 입력을 받도록 처리하고 공의 위치를 swap을 하도록 하였다. 완성된 코드!! 😊👍 M = int(input()) cup = [1, 0, 0] for i in range(M): x, y = map(int, input().split()) cup[x - 1..

article thumbnail
[python] 백준 1085번 직사각형에서 탈출
알고리즘/백준 2021. 8. 24. 20:30

문제 요약 및 풀이 직사각형의 경계선까지 가는 거리의 최솟값을 구하라. 직사각형의 좌표 값이 0, 0과 w, h가 주어지는데 예제 입력 1을 예로 들면 0, 0 ------- 10, 3이 주어지고 한수라는 애가 6, 2 지점에 있다고 생각하면 그림은 이렇게 그려진다. (오른쪽만 보면 된다) 이 그림을 가지고 설명을 하자면 한수의 좌표를 중심으로 보면 상하좌우의 최솟값 중에 가장 작은 값이 직사각형의 경계선까지 가는 거리의 최솟값이라고 볼 수 있다. 값만 뽑아보자면, 1 2 4 6 이 되는데 이 값들을 식으로 표현하자면 밑의 표처럼 된다. 1 h-y 2 y-0 = y 4 w-x 6 x-0 = x 그중 최솟값인 1이 결과값으로 출력이 되는 것이다. python에서 최솟값을 뽑아낼 수 있는 min()이라는 메..

article thumbnail
[python] 백준 2490번 윷놀이
알고리즘/백준 2021. 8. 23. 22:48

문제 요약 및 풀이 표 하나로 설명을 하겠다. 도 개 걸 윷 모 배(0) 배(0) 배(0) 배(0) 등(1) 등(1) 배(0) 배(0) 배(0) 등(1) 등(1) 등(1) 배(0) 배(0) 등(1) 등(1) 등(1) 등(1) 배(0) 등(1) 0111 0011 0001 0000 1111 0의 개수 : 1 0의 개수 : 2 0의 개수 : 3 0의 개수 : 4 1의 개수 : 4 도, 개, 걸, 윷 같은 경우 0의 개수를 카운팅 해주면 되고 모 같은 경우는 1의 개수를 카운팅 해주면 된다. 딕셔너리를 안 써도 되지만 써서 해봤다. 입력값을 공백을 기준으로 분리하여야 하기 때문에 input().split()으로 입력을 받았다. 나머지는 표의 개수란과 같이 if문을 돌려서 해주었기 때문에 표를 참고하면 될 것 같..

article thumbnail
[python] 백준 1284번 집 주소
알고리즘/백준 2021. 8. 21. 12:10

문제 요약 숫자가 차지하는 길이와 좌, 우 여백의 길이 및 숫자 하나하나의 간격의 길이를 구해야 한다. 0일 때 차지하는 길이는 4, 1이 차지하는 길이는 2, 2~9가 차지하는 길이는 3이다. 문제 풀이 예제 입력 1에서 120을 예시로 들어줬는데 좌, 우 여백의 길이를 총 2로 생각하고, 120이라는 수이지만 쪼개면 1 2 0 이 되어 여백의 길이는 2가 되고 숫자 하나하나 차지하고 있는 길이를 구하면 1은 2, 2는 3, 0은 4가 나와서 1+2+1+3+1+4+1 = 13이 된다. 설명이 어려웠다면 밑에 사진을 첨부해놨으니 참고하길 바란다. N을 입력받아 문자 0과 같다면 종료 문자열 N을 for문을 돌려 각 자리를 분리. 그 분리한 문자들을 배열에 넣어준다. tot변수(총길이)를 만들어주고 배열의..

article thumbnail
[python] 백준 2576번 홀수
알고리즘/백준 2021. 8. 15. 19:58

문제 요약 자연수 7개 input, 그중 홀수를 찾고 그 홀수들의 합을 첫째줄에, 그 홀수들 중 가장 작은 값을 둘째 줄에 만약 자연수 7개를 입력받았는데 홀수가 존재하지 않는 경우에는 -1을 출력 문제풀이 홀수 같은 경우 % 연산자로 쉽게 구할 수 있다. N % 2 == 1 -> N을 2로 나누었을 때 나머지가 1일 때, 즉 3을 2로 나누었을 때 나머지 1, 홀수 일 때를 말한다. 반대로 N % 2==0 일때 짝수이게 되는 것이다. 1. list를 만들어 홀수 일 때만 list에 값을 넣어줌 2. 해당 list에 있는 값들의 합(sum)을 구하고, list 안의 값 중 최솟값(min)을 출력 3. list의 길이가 0이 아닐 때 2번을 수행하고 아니면 -1을 출력 완성 코드! 👍😊 java를 주로 많..

article thumbnail
[python] 백준 3009번 네 번째 점
알고리즘/백준 2021. 8. 15. 17:06

문제 요약 직사각형의 네 번째 점의 좌표값을 구하는 것. 간단히 필자의 개발새발 그림 실력으로 나타내 보았다. 처음에는 예제 입력 1만 보고 max값만 구하겠거니 해서 코드를 그냥 제출해버렸다. 당연히 틀렸다. 예제 입력 2를 보면 아래와 같이 주어지는데 30 20 10 10 10 20 네 번째 점의 좌표값을 구해보면 (30, 10) 이 나와야 되는데 max값인 (30, 20)이 나온다 ㅋㅋ.... 그러면 표에서 왼쪽은 x값들, 오른쪽은 y값들이라고 생각했을 때 list의 원소 값이 하나인 것만 체크해서 돌려주면 된다고 생각했다. 입력은 총 3번 이루어지기 때문에 for문의 range(3)으로 설정해두고 x값들을 담을 list인 x_list, y값들을 담을 list인 y_list를 만들어준다. x, y값..

article thumbnail
[python] 백준 2566번 최댓값
알고리즘/백준 2021. 8. 13. 23:51

java로 풀었다면 아마도 이중 for문을 이용해서 2차원 배열을 선언하고 값을 넣어 max값을 구했을 것이다. 하지만 python을 배우다가 1행이 list로 되어있다면? 반복문을 한 번만 돌리면 1행 즉, list에 9개의 값이 들어가게 되는 것이다. 이 코드를 보면 value = [] for i in range(1): value = list(map(int, input().split())) print(value) 아래의 코드를 보게 되면 입력값을 받게 된다. 한 행의 리스트가 들어올 때 그 중에서 가장 큰 값이 max_n으로 들어가게 되고 두 번째 행의 코드로 대체가 된다. 결과를 보면 알 수 있다. max_n = 0 value = [] for i in range(9): value = list(map..

article thumbnail
[java] 백준 1964번 오각형, 오각형, 오각형…
알고리즘/백준 2021. 8. 13. 22:07

간단하게 표로 설명하겠다. (공책에 끄적였으나 보기가 매우 불편합니다.) 오각형의 단계와 점의 개수로 표에 값을 넣어봤다. 단계 1 2 3 4 5 점의 개수 5 5+7 5+7+10 5+7+10+13 5+7+10+13+16 표에서 보면 어떠한 규칙이 있다. 기존에 점의 개수를 두고 추가적으로 더해지는데 1단계 5, 2단계 7 3단계부터는 10 4단계 13 5단계 16 3단계부터는 등차수열 즉, 3씩 증가한다. 등차수열을 생각하고 코드를 짜면 된다. import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(Syste..

article thumbnail
[java] 백준 2506번 점수계산
알고리즘/백준 2021. 8. 12. 23:54

문제 요약 답을 틀리다가 답이 맞으면 처음 문제는 1점으로 계산 연속으로 문제를 맞히게 되면 두 번째 문제는 2점, 세 번째 문제는 3점으로 계산 예제 입력이 아래와 같이 들어왔을 때 10 1 1 1 1 1 1 1 1 1 1 첫번째 문제부터 마지막 문제(10번)까지 다 맞았기 때문에 점수는 아래와 같이 된다. 1 2 3 4 5 6 7 8 9 10 맞은 문제를 누적시켜서 더하게 되면 총점은 55점이 되는 것이다. 이해가 안 된다면 추가적으로 예제를 더 보여주겠다. 10 1 0 0 0 1 1 1 1 0 0 1 0 0 0 1 2 3 4 0 0 총점 = (1+1+2+3+4) = 11 이 출력으로 나오게 된다. 이제 감이 잡혔으면 코드를 보자. 문제의 개수 N을 입력받고 N개의 문제의 채점 결과를 나타내는 0, ..

article thumbnail
[java] 백준 2501번 약수 구하기
알고리즘/백준 2021. 8. 11. 17:38

문제 요약 자연수 N과 K가 주어졌을 때, N의 약수 중 K번째로 작은 수 출력 N의 약수의 개수가 K보다 적어서 K번째 약수가 없을 경우 0 출력 예제 입/출력 1을 보자. 6과 3이 주어졌다면 6의 약수는 1, 2, 3, 6이다. 3번째로 작은 수는 3이 출력된다. 예제 입/출력 2를 보자. 25와 4가 주어졌는데 25의 약수는 1, 5, 25이다. 4번째로 작은 수가 없으므로 0이 출력된다. 예제 입/출력 3을 보자. 2735와 1이 주어졌는데 2735의 약수는 1, 5, 547, 2735이다. 1번째로 작은 수는 1이 출력된다. 문제 풀이 일단 자연수 N을 입력받아서 배열을 N만큼 선언 및 초기화한다. 배열 arr에 N을 i(1~N)까지 나눠서 나머지가 0이면 i값을 넣어준다. (N=6일 때) a..

article thumbnail
[java] 백준 2765번 자전거와 속도
알고리즘/백준 2021. 8. 10. 14:52

문제를 요약하자면... 바퀴의 지름과 회전수로 이동거리를 구할 수 있고, 바퀴가 회전하는 동안 걸린 시간과 이동거리를 이용하여 평균 속도를 구할 수 있다. 다른 문제들과 다르게 쓰일 단위들이 많아서 힌트에 '이렇게 쓰면 된다'는 느낌으로 써주었다. 나 같은 경우 힌트를 안 보고 'miles to inch'를 검색하여 찾았지만 ㅋㅋㅋ 예제 입/출력을 보다가 힌트가 있는 것을 보게 되어 참조했다. 코딩을 하기 전에 어떻게 풀지 공책에 끄적여 보았다. 지름(diameter) : d, 회전수(cycle) : c, 걸린 시간(second) : s 이동거리 : distance, 평균 속도 : mph 이동거리 같은 경우 입력에서는 inch로 입력 받는데 출력에서 miles로 출력해야 되기 때문에 inch를 5280으..