2566 - 최댓값
·
알고리즘 공부/백준 사이트 문제
문제과 같이 9×9 격자판에 쓰여진 81개의 자연수 또는 0이 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 행 몇 열에 위치한 수인지 구하는 프로그램을 작성하시오.예를 들어, 다음과 같이 81개의 수가 주어지면 1열2열3열4열5열6열7열8열9열1행2행3행4행5행6행7행8행9행3238534177425526510739428852147263874218785345188453342864851216753655217745352875907612587651528113728746527754178978643947477045236534144871382383112292980이들 중 최댓값은 90이고, 이 값은 5행 7열에 위치한다.입력첫째 줄부터 아홉 번째 줄까지 한 줄에 아홉 개씩 수가 주어진다. 주어지는 수는 100..
2615 - 오목
·
알고리즘 공부/백준 사이트 문제
문제오목은 바둑판에 검은 바둑알과 흰 바둑알을 교대로 놓아서 겨루는 게임이다. 바둑판에는 19개의 가로줄과 19개의 세로줄이 그려져 있는데 가로줄은 위에서부터 아래로 1번, 2번, ... ,19번의 번호가 붙고 세로줄은 왼쪽에서부터 오른쪽으로 1번, 2번, ... 19번의 번호가 붙는다.위의 그림에서와 같이 같은 색의 바둑알이 연속적으로 다섯 알을 놓이면 그 색이 이기게 된다. 여기서 연속적이란 가로, 세로 또는 대각선 방향 모두를 뜻한다. 즉, 위의 그림은 검은색이 이긴 경우이다. 하지만 여섯 알 이상이 연속적으로 놓인 경우에는 이긴 것이 아니다.입력으로 바둑판의 어떤 상태가 주어졌을 때, 검은색이 이겼는지, 흰색이 이겼는지 또는 아직 승부가 결정되지 않았는지를 판단하는 프로그램을 작성하시오. 단, 검..
2578 - 빙고
·
알고리즘 공부/백준 사이트 문제
시간 제한메모리 제한제출정답맞힌 사람정답 비율1 초128 MB28964135221084646.466 %문제 빙고 게임은 다음과 같은 방식으로 이루어진다.먼저 아래와 같이 25개의 칸으로 이루어진 빙고판에 1부터 25까지 자연수를 한 칸에 하나씩 쓴다다음은 사회자가 부르는 수를 차례로 지워나간다. 예를 들어 5, 10, 7이 불렸다면 이 세 수를 지운 뒤 빙고판의 모습은 다음과 같다.차례로 수를 지워가다가 같은 가로줄, 세로줄 또는 대각선 위에 있는 5개의 모든 수가 지워지는 경우 그 줄에 선을 긋는다.이러한 선이 세 개 이상 그어지는 순간 "빙고"라고 외치는데, 가장 먼저 외치는 사람이 게임의 승자가 된다.철수는 친구들과 빙고 게임을 하고 있다. 철수가 빙고판에 쓴 수들과 사회자가 부르는 수의 순서가 주..
13275 - 가장 긴 팰린드롬 부분 문자열
·
알고리즘 공부/백준 사이트 문제
문제문자열 S의 부분 문자열 중에서 팰린드롬인 것 중 가장 긴 것의 길이를 구하는 프로그램을 작성하시오.입력첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있으며 길이는 1보다 크거나 같고, 100,000보다 작거나 같다.출력가장 긴 팰린드롬 부분 문자열의 길이를 출력한다. from collections import Counter, defaultdictimport sysinput = lambda: sys.stdin.readline().rstrip()s = input()# 슬라이싱 윈도우 알고리즘# 각 인덱스를 기준점으로 해서 팰랜드롬의 최대 길이를 구한다.# 기준점이 홀수가 있고, 짝수가 있다.def expand(s : str, left : int, right : int) -> list..
6566 - 애너그램 그룹
·
알고리즘 공부/백준 사이트 문제
문제평생 영어 단어를 암기한 준민이는 단어를 애너그램 그룹으로 나누려고 한다.단어 w가 단어 v의 애너그램이 되려면, 단어 w의 알파벳 순서를 바꿔서 v를 만들 수 있어야 한다. 이렇게 애너그램인 단어들을 묶어서 애너그램 그룹이라고 한다. 그룹의 크기는 그 그룹에 포함된 단어의 수이다.단어가 주어졌을 때, 크기가 가장 큰 애너그램 그룹 다섯 개를 구하는 프로그램을 작성하시오.입력입력은 최대 30,000 줄로 이루어져 있고, 각 줄에는 알파벳 소문자로 이루어진 단어가 하나씩 주어진다. 입력은 EOF로 끝난다. 출력크기가 가장 큰 애너그램 다섯 개를 출력한다. 만약, 그룹의 수가 다섯개보다 작다면, 모두 출력한다. 그룹은 크기가 감소하는 순으로, 크기가 같을 때는 각 그룹에서 가장 사전 순으로 앞서는 단어의..
20920 - 영단어 암기는 괴로워
·
알고리즘 공부/백준 사이트 문제
문제화은이는 이번 영어 시험에서 틀린 문제를 바탕으로 영어 단어 암기를 하려고 한다. 그 과정에서 효율적으로 영어 단어를 외우기 위해 영어 단어장을 만들려 하고 있다. 화은이가 만들고자 하는 단어장의 단어 순서는 다음과 같은 우선순위를 차례로 적용하여 만들어진다.자주 나오는 단어일수록 앞에 배치한다.해당 단어의 길이가 길수록 앞에 배치한다.알파벳 사전 순으로 앞에 있는 단어일수록 앞에 배치한다$M$보다 짧은 길이의 단어의 경우 읽는 것만으로도 외울 수 있기 때문에 길이가 $M$이상인 단어들만 외운다고 한다. 화은이가 괴로운 영단어 암기를 효율적으로 할 수 있도록 단어장을 만들어 주자.입력첫째 줄에는 영어 지문에 나오는 단어의 개수 $N$과 외울 단어의 길이 기준이 되는 $M$이 공백으로 구분되어 주어진다..
1157 - 단어 공부
·
알고리즘 공부/백준 사이트 문제
문제알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. 입력첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.출력첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.from collections import Counterimport sysinput = lambda: sys.stdin.readline().rstrip()# 1. 문장 입력 받기기#실패 후 문제 분석: 대소문자 구분 없이 처리해야 함sentence = input().upper()# 2...
파이썬 정규 표현식(re)
·
알고리즘 공부
복잡한 문자열에서 특정 패턴을 검색, 추출, 치환하는 방법을 배웁니다.1. re 모듈의 4가지 핵심 함수import re 가 항상 필요합니다.re.search(패턴, 문자열):문자열 전체를 검색하여 **첫 번째로 일치하는 객체(Match Object)**를 반환합니다.일치하는 것이 없으면 None을 반환합니다.match = re.search(r'\d+', 'My number is 1234 and 5678')if match: print(match.group()) # 출력: '1234' (첫 번째 숫자만)re.findall(패턴, 문자열):문자열 전체를 검색하여 일치하는 모든 부분을 **리스트(list)**로 반환합니다.코딩 테스트에서 가장 유용하게 사용됩니다.numbers = re.findall(r'..
파이썬 컴프리핸션(Comprehension)
·
알고리즘 공부
C# (LINQ) vs 파이썬 (Comprehension)C# LINQ: list.Where(x => x % 2 == 0).Select(x => x * x);파이썬: [x * x for x in list if x % 2 == 0]두 코드는 거의 1:1로 대응되며, 파이썬의 문법이 좀 더 자연어(영어)에 가깝게 읽히는 특징이 있습니다.1. 리스트 컴프리핸션 (List Comprehension) - 기본가장 기본적이고 많이 사용되는 형태입니다. for 반복문을 한 줄로 압축합니다.Before (전통 방식):# 0부터 9까지의 숫자를 제곱한 리스트 만들기squares = []for x in range(10): squares.append(x * x)# squares -> [0, 1, 4, 9, 16, 25..