Problem Solving/Baekjoon

    백준 14500번 - 테트로미노(C++)

    백준 14500번 - 테트로미노(C++)

    문제 https://www.acmicpc.net/problem/14500 14500번: 테트로미노 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변 www.acmicpc.net 설명 엄청난 노가다 문제다. 위 4개의 테트로미노 모양으로 숫자를 묶었을 때 가장 큰 수를 출력해야 하는데, 문제는 테트로미노를 회전하고 대칭시켜도 된다는 것이다. 그래서 총 2(하늘) + 1(노랑) + 4(분홍) + 4(초록) + 8(주황) = 19개의 경우의 수가 있는데 이걸 하나하나 계산하고 싶지는 않았다. 그래서 짱돌같은 내 머리를 열심히 굴려 좀 더 예쁜 코드를 짰다. 하늘색 경우의..

    백준 2812번 - 크게 만들기(Swift)

    문제 www.acmicpc.net/problem/2812 2812번: 크게 만들기 N자리 숫자가 주어졌을 때, 여기서 숫자 K개를 지워서 얻을 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오. www.acmicpc.net 설명 n과 k를 입력받은 다음 들어오는 N자리 숫자는 Int로 저장하지 않고 인덱스를 통해 숫자 하나하나에 접근하기 위해 Character 배열로 저장한다. 숫자의 왼편부터 제일 오른편 숫자까지 하나씩 검사하며 지금 스택의 top에 있는 숫자와 비교한다. top보다 지금 검사하고 있는 수가 더 크다면 스택에서 top을 pop한 후에 지금 검사하고 있는 수를 집어넣고 k를 1만큼 감소시킨다. 모든 루프를 마친 후 stack의 0번째부터 stack.count - k - 1번째 인덱스에 ..

    백준 9519번 - 졸려(Python)

    문제 https://www.acmicpc.net/problem/9519 9519번: 졸려 문제 선영이는 다가오는 COCI에 사용할 데이터를 만드느라 삼일동안 깨어있었다. 더 이상 데이터를 만들 수 없는 상황에 이르렀고, 심지어 선영이는 신경쇠약에 걸려 아무것도 제대로 보지 못하� www.acmicpc.net 풀이 처음으로 생각해 낸 방법은 문제에 나와있는 셔플을 그대로 역으로 실행하는 것을 n만큼 반복하는 반복하는 것이었는데, 문제를 잘 보니 n 크기가 최대 10억이었다(...). 보통 이렇게 무언가를 반복해야 하는 문제인데 n값이 터무니없이 크다면 주기가 있는 경우가 많아서, 일단 문제에 나와있는 대로 코드를 짠 다음 주기를 찾아보려고 했다. 4~10글자로 셔플을 돌려보니 주기가 있는 것은 확실한데, ..

    백준 2675번 - 문자열 반복(Python)

    num = int(input()) for i in range(num): number, string = input().split() txt = '' for j in string: txt += j * int(number) print(txt) string의 각 문자를 number만큼 반복하여 txt에 붙여넣고 출력. 초간단 하지만 이 문제의 의문점은 num = int(input()) for i in range(num): number, string = input().split() for x in string: print(x * int(number), end='\n' if x == string[-1] else '') 왜 저 코드는 맞고 이 코드는 틀리냐는 것. 아직도 반례를 못 찾았다.

    백준 1431번 - 시리얼 번호(Python)

    https://www.acmicpc.net/problem/1431 문제 다솜이는 기타를 많이 가지고 있다. 그리고 각각의 기타는 모두 다른 시리얼 번호를 가지고 있다. 다솜이는 기타를 빨리 찾아서 빨리 사람들에게 연주해주기 위해서 기타를 시리얼 번호 순서대로 정렬하고자 한다. 모든 시리얼 번호는 알파벳 대문자 (A-Z)와 숫자 (0-9)로 이루어져 있다. 시리얼번호 A가 시리얼번호 B의 앞에 오는 경우는 다음과 같다. A와 B의 길이가 다르면, 짧은 것이 먼저 온다. 만약 서로 길이가 같다면, A의 모든 자리수의 합과 B의 모든 자리수의 합을 비교해서 작은 합을 가지는 것이 먼저온다. (숫자인 것만 더한다) 만약 1,2번 둘 조건으로도 비교할 수 없으면, 사전순으로 비교한다. 숫자가 알파벳보다 사전순으로..