망나니 AWOS의 일상
article thumbnail
[python] 백준 20112번 사토르 마방진
알고리즘/백준 2021. 9. 21. 18:04

문제 요약 및 풀이 N을 입력받으면 N X N 만큼 크기의 단어 집합이 만들어진다. 이 단어 집합은 가로 단어와 세로 단어가 같다. (사토르 마방진의 개념) 사토르 마방진이면 YES를 아니면 NO를 출력 2차원 배열로 풀 생각으로 그려보았다. N X N 만큼이라고 했으니 2차원 배열로 [N][N] 크기만큼 두 개의 배열을 만들어 놓는다. 사토르 마방진은 가로 단어와 세로 단어가 같다고 했기 때문에 두 개의 배열(가로 단어 집합, 세로 단어 집합)을 만들어야겠다고 생각했다. 입력받는 값들을 보면 가로로 단어를 입력받기 때문에 해당 집합을 그림과 같이 나타내 보면 세로는 대칭이라고 볼 수 있다. 2차원 배열의 특징인 [i][j]를 [j][i]로 스왑 하여 세로 단어 집합의 배열을 만들면 된다. 이해가 잘 되..

article thumbnail
[python] 백준 1977번 완전제곱수
알고리즘/백준 2021. 9. 9. 23:34

문제 요약 및 풀이 완전제곱수. 64의 제곱근 8, 8을 제곱하게 되면 다시 64가 된다. 내가 생각한 풀이다. 제곱근을 구하고 정수형으로 타입 변환을 해준후에 다시 제곱하면 완전제곱수가 될 것이라고 생각했다. M N i = M int(i**0.5) T = int(i**0.5)**2 i == T sqrt_list 60 100 60 7 49 False 61 7 49 False 62 7 49 False 63 7 49 False 64 8 64 True 64 .... ... ... .... .... 100 10 100 True 64, 81, 100 표와 같이 결과가 나온다. 나머지는 M이상 N이하의 자연수 중에 완전제곱수가 없을 때에는 -1을 출력, 아니면 첫째줄에 합과 둘째 줄에 최솟값을 출력해주면 된다. 완..

article thumbnail
[python] 백준 1453번 피시방 알바
알고리즘/백준 2021. 9. 7. 23:35

문제 요약 및 풀이 피시방 자리는 1번부터 100번까지 있다. 처음에는 모두 비어있고, 들어오는 손님은 자기가 앉고 싶은 자리에만 앉고 싶어 한다. 해당 자리에 사람이 있으면 거절당한다. 거절당한 사람 수 출력 표로 정리해보았다. sit : 자리 번호 (1 ~ 100) N : 손님의 수 customer : 손님이 앉고 싶은 자리 cnt : 거절 당한 사람 수(누적) 1 5 1 0 2 2 0 3 3 0 4 2 1 5 3 2 ... 이미 1, 2, 3번 자리에는 자리가 있으니... 나중에 들어온 4번째, 5번째 손님이 앉고 싶은 자리 2번, 3번을 못 앉게 된다. 그럼 출력 결과는 2가 나오게 된다. 아래의 코드를 보면 sit의 배열의 크기를 미리 101개를 만들어두었다. 자리는 1~100까지 있지만 배열의..

article thumbnail
[python] 백준 1357번 뒤집힌 덧셈
알고리즘/백준 2021. 9. 6. 17:30

문제 요약 및 풀이 X, Y가 주어졌을 때, X, Y를 Reverse 시키고 합을 구한 후에 다시 Reverse를 시키면 된다. 처음에 문제를 제대로 읽지 않아... X, Y의 합을 구하고 Reverse를 시켰다. 틀려서 다시 대충 읽고 X, Y의 각각에 대해 Reverse를 시키고 합을 구했다. 또다시 틀려서 제대로 읽고 풀었다. 표로 작성을 해보면 아래와 같이 된다. X, Y를 입력받고 표의 오른쪽으로 진행이 된다고 볼 수 있다. X Y T = reverse(X) K = reverse(Y) T+K reverse(T+K) 123 100 321 1 322 223 그냥 간단하게 문자열의 슬라이싱과 리스트를 이용하여 돌렸다. 슬라이싱을 통해 reverse를 구현하였다. 완성된 코드!! 👍😊 s = input..

article thumbnail
[python] 백준 20362번 유니대전 퀴즈쇼
알고리즘/백준 2021. 9. 5. 02:34

문제 요약 및 풀이 N개의 채팅 기록 중에 정답자 S의 채팅 내용과 같은 채팅 내용들을 찾으면 된다. 내가 생각한 풀이는 이렇다. 1. 딕셔너리를 만들어서 dict[name] = chat 로 한 쌍을 이루어서 저장 2. 해당 dict[S]를 정답 answer에 대입하여 for문을 돌려 answer와 같은 채팅 내용을 가진 사람들을 카운팅 3. dict[S]가 아닌 사람들을 카운팅 해야 되기 때문에 if문으로 break 예제 입력 1을 예로 들면 N = 3, S = duck일 때 N name chat answer cnt 출력 1 oridya hello 2 orihehe hi hi 1 1 3 duck hi hi 2 표 이해가 안될 수도 있을 텐데... 그 부분은 풀이 1, 2, 3을 참조하면 될 것 같다. ..

article thumbnail
[python] 백준 11179번 2진수 뒤집기
알고리즘/백준 2021. 9. 2. 15:25

문제 요약 및 풀이 정수 N -> 13을 입력받아서 2진수로 바꾼 후 2진수를 뒤집어서 그거를 다시 정수로 만들면 된다. 예제 입력 1을 예로 보여주자면 N 2진수로 변환 2진수 reverse 바뀐 N 13 1101 1011 11 위의 표처럼 출력이 나오게 된다. 정수로 입력을 받는데 이진수로 받고, 0b~~~ 이런 식으로 나온 이진수의 앞의 '0b'를 제거해서 숫자만 나오도록 한다. 제거한 숫자(문자열)을 reverse로 순서를 뒤집어주고 0b를 다시 붙여준 후에 10진수로 만들어주면 된다. 아래와 같은 코드로 마무리 짓겠다. 완성된 코드!! 👍😊 s_N = bin(int(input())).replace("0b", "") arr_list = '0b'+''.join(list(reversed(s_N))) ..

article thumbnail
[python] 백준 1834번 나머지와 몫이 같은 수
알고리즘 2021. 8. 30. 21:20

문제 요약 및 풀이 어떤 자연수(K)를 N으로 나누었을 때 나머지와 몫이 같은 자연수의 합을 구해라. K % 3이라면 몫이 1이고 -- 나머지가 1인 4와, 몫이 2이고 -- 나머지가 2인 8이 나올 것이다. 두 자연수의 합은 12가 된다. 잘 이해가 안 되면 아래의 표로 설명하겠다. K % N 몫 나머지 K K의 배수 K % 2 1 1 3 3 K % 3 1 1 4 4 2 2 8 K % 4 1 1 5 5 2 2 10 3 3 15 K % 5 1 1 6 6 2 2 12 3 3 18 4 4 24 K % 6 1 1 7 7 2 2 14 3 3 21 4 4 28 5 5 35 위의 표처럼 나타내면 규칙이 보인다. 몫과 나머지는 1부터 N-1까지이고 K를 N으로 나누었을 때 K는 N+1의 배수인걸 알 수 있다. N이 ..

article thumbnail
[java] 백준 1252번 이진수 덧셈
알고리즘/백준 2021. 8. 8. 20:03

문제는 쉬워 보일 수 있다. 하지만 입력에서 각 이진수의 길이는 80을 넘지 않는다. 즉, 79자리인 입력이 들어올 경우 웬만한 자료형들은 범위를 벗어나 NumberFormat과 같은 런타임 에러가 발생할 수 있다. 여기서 써야할 클래스는 BigInteger 클래스, int, long, String으로 해보았지만 되는 것은 없었고 결론은 BigInteger 클래스였다. 나의 풀이 방법은 이렇다. 무한한 수를 담을 수 있는 BigInteger 클래스로 값을 담아서 문자열로 바꿔 준 후 문자열(2진수)을 다시 10진수로 변환시키기 위해서 BigInteger 클래스에 담아준다. 그리고 BigInteger의 add 메소드를 통해 10진수로 변환한 a와 b의 가산을 해주고 toString() 메소드로 다시 2진수..

article thumbnail
[java] 백준 2748번 피보나치 수 2
알고리즘/백준 2021. 8. 8. 10:14

먼저 문제를 보기 전 어제 풀었던 피보나치 수 문제와 같은 문제다. 단지 범위가 커진 것 뿐... [java] 백준 2747번 피보나치 수 문제를 설명하기 앞서 이 아래의 문제와 같은 문제이다. 예제 입력과 출력은 같다. 즉, F(n) = F(n-2) + F(n-1) 이 문제는 간단하게 재귀를 쓰면 된다. import java.util.Scann.." data-og-host="begin-dev-awos... begin-dev-awos.tistory.com 피보나치 수(2747번) 문제와 동일하기 때문에 코드에 대한 설명은 하지않고 어떤 점이 달라지는지를 설명하도록 하겠다. 간단하게 2747번 문제라고 하겠다. 2747번 문제 같은 경우 int형의 범위 안에서 결과값이 나올 수 있었는데... 이번 문제 같..