Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- Stack
- 메모리구조
- 이스케이프 문자
- Serialization
- Selection Sorting
- insertion sort
- Graph
- Algorithm
- 윤성우 열혈자료구조
- datastructure
- stream
- 이것이 자바다
- R
- JSON
- C 언어 코딩 도장
- s
- list 컬렉션
- coding test
- 혼자 공부하는 C언어
- buffer
- 알기쉬운 알고리즘
- 윤성우의 열혈 자료구조
- C programming
Archives
- Today
- Total
Engineering Note
[BOJ:1316] 그룹 단어 체커 본문
Link : https://www.acmicpc.net/problem/1316
Note
첫 번째 풀이는 스택을 이용해서 풀이했다. 입력 된 문자를 선형 탐색하면서 연속적으로 같은 값이 나오면 스택에 넣어주고 다른 값이 나올 때 기존 스택을 비워주고 다시 스택에 넣는다. 이때 스택에 넣을 때 선형탐색에서 최초 등장 문자의 경우 등장여부를 체크한다. 그리고 다시 선형탐색하는데 이번 문자가 기존에 나왔던 문자라면 그룹단어가 아니다.
두 번째 풀이는 슬라이싱을 활용해서 풀이했다. 첫 번째와 마찬가지고 선형탐색하는데 현재 인덱스를 i라고 할 때 i번째 문자와 i+1번째 문자를 비교한다. 비교하면서 두 문자가 서로 다를 경우 i번 째 인덱스가 이후의 또 등장하는지 체크해서 등장하면 그룹문자가 아니다.
Code
import sys
input = sys.stdin.readline
N = int(input())
group_word = 0
for _ in range(N):
word = input().rstrip()
alphabet = [False]*(26)
stack = []
for ch in word:
if len(stack) != 0:
if stack[-1] == ch:
stack.append(ch)
else:
if alphabet[ord(ch)-97]:
break
else:
stack = [ch]
alphabet[ord(ch)-97] = True
else:
if alphabet[ord(ch)-97]:
break
else:
stack.append(ch)
alphabet[ord(ch)-97] = True
else:
group_word += 1
print(group_word)
import sys
n = int(input())
group_word = 0
for _ in range(n):
word = input()
flag = True
for index in range(len(word)-1):
if word[index] != word[index+1]:
if word[index] in word[index+1:]:
flag = False
break
if flag:
group_word+= 1
print(group_word)
다른 사람 풀이
for _ in range(n):
word = input()
a = list(word)
b = sorted(word, key=word.find)
group_word += a==b
print(group_word)
sorted(word, key=word.find) 문자열에 대해서 key=word.find 를 기준으로 정렬하면 문자에서 처음 등장하는 문자들을 기준으로 정렬된다. 예를 들면 'xcabx'라는 문자가 있었을 때 정렬 기준은 x부터 'xx' 그 다음 c 'xxc' 그 다음 a 'xxca' 그 다음은 b, 'xxcab' 이렇게 정렬된다. 이 함수를 잘 이용하면 쉽게 풀 수 있는데, sorted의 첫 번째 parameter로 문자열을 넣어주고 key=word.find를 넣어주면 문자열의 순서를 기준으로 정렬이 되고 반환 값은 list이다. 기존 문자열도 list로 만들어 주고 두 리스트를 비교하여 같으면 그룹단어이고, 다르면 그룹단어가 아니다.
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ:1444] 별찍기 - 7 (0) | 2022.05.10 |
---|---|
[BOJ:1748] 수 이어 쓰기1 (0) | 2022.05.09 |
[BOJ:1475] 방 번호 (0) | 2022.05.09 |
[BOJ:2941] 크로아티아알파벳 (0) | 2022.05.08 |
[BOJ:1002] 터렛 (0) | 2022.05.06 |
Comments