https://www.acmicpc.net/problem/1343

 

1343번: 폴리오미노

첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다.

www.acmicpc.net


이건 그냥 음 처음에는 split써서 . 나눌까 했는데
그럼 ...이 여러개 나오면?
결국 구현했긴 한데
틀렸다.

그래서 순서대로 구해보기로 했는데

알고리즘은 간단하다.
1. 입력받는다.
2. "."과 문장 끝이 아니면 카운트센다
3. "."이 나오거나 문장끝이면

  • 카운트가 홀수이면 구현할 수 없기 때문에 "-1" 출력
  • 4로 나눠지면 "AAAA"추가
  • 2로 나눠지면 "BB"추가
#include <iostream> #include <string> using namespace std; int main() { string input_str; cin >> input_str; string output; int count = 0; for (int i = 0; i < input_str.size()+1; i++) { if (input_str[i] == '.' || input_str[i] == '\0') { if (count % 2 != 0) { cout << "-1"; return 0; } while (count / 4 != 0) { output+= "AAAA"; count -= 4; } while (count / 2 != 0) { output += "BB"; count -= 2; } if (i != input_str.size()){ output+="."; count = 0; } } else { count++; } } for (int i = 0; i < output.size(); i++) { cout << output[i]; } return 0; }



python

#1343 import sys input_str= str(input()) count = 0 output = "" for i in range(len(input_str)+1): if i == len(input_str) or input_str[i] == '.' : if count % 2 != 0: print("-1") sys.exit() while(count //4 != 0): output += "AAAA" count -= 4 while (count//2 != 0): output += "BB" count -= 2 if i != len(input_str): output += "." count = 0 else: count+=1 print(output) 

+ Recent posts