본문 바로가기

스터디 1일 1커밋

240202. 백준 1181번 문제

첫번째 시도 - 버블정렬

#단어 정렬
N = int(input())
data = [input() for _ in range(N)]

# print(data)
data_list = []
for i in data:    
    count = 0
    for j in i:
        count +=1               #단어별 길이 계산
    data_list.append([i,count]) #빈 리스트에 단어와 길이 리스트형태로 추가


deduped_data = []
for i in data_list:
    if i not in deduped_data:
        deduped_data.append(i)

data_list = deduped_data


#길이로 정렬
for _ in range(12):
    for i in range(1,len(data_list)):
        if data_list[i][1] < data_list[i-1][1]:
            data_list[i], data_list[i-1] = data_list[i-1], data_list[i]


#길이가 같을 때 사전 순으로 정렬
for i in range(1, len(data_list)):
    if data_list[i][1] == data_list[i-1][1]:
        if data_list[i][0] < data_list[i-1][0]:
            data_list[i], data_list[i-1] = data_list[i-1], data_list[i]
           
        # elif data_list[i][0] == data_list[i-1][0]:
        if data_list[i][1] < data_list[i-1][1]:
            data_list[i], data_list[i-1] = data_list[i-1], data_list[i]
            # print(data_list[i][1])
    else:
        continue


for i in data_list:
    print(i[0])


# #2차원리스트를 튜플로 바꾸고 세트를 활용하여 중복제거
# data_list = list(set([tuple(set(item)) for item in data_list])) #이건 순서가 뒤바뀜, 구글에서는 순서 안바뀌는 걸로 나옴

# deduped_data = []
# for i in data_list:

#     deduped_data.append([i[0], i[1]])

# for j in deduped_data:            이 코드로도 순서가 안바뀜
#     if type(j[0]) == int:
#         j[0], j[1] == j[1], j[0]
#         print(j[0], j[1])

 

두번째 시도 - 카운팅정렬

```

N = int(input())
data = [input() for _ in range(N)]

deduped_data = []
for i in data:
    if i not in deduped_data:
        deduped_data.append(i)

data = deduped_data

# range 범위 조정안하고 버블 정렬하려면, 정석대로인 뒤에서부터 하면 됨.
for last in range(len(data)-1, 0, -1):
    for i in range(last):
        if data[i] > data[i + 1]:
            data[i], data[i + 1] = data[i + 1], data[i]


m = 51
counts = [0] *m
for i in range(len(data)):
    counts[len(data[i])] += 1
for i in range(1, m):
    counts[i] += counts[i - 1]
data_list = [0] * (len(data))
for i in range(len(data)-1,-1,-1):
    data_list[counts[len(data[i])]-1] = data[i]
    counts[len(data[i])] -= 1

for i in data_list:
    print(i)

```

 

느낀점

# 단어와 대응하는 단어길이 리스트를 만들어서 대응하는 방식으로 푸는게 1차원 리스트라 비교가 편할 것 같다.